magento 开发-- Magento自带的热门搜索关键词功能存在的问题和本土化方案

    现在国内大大小小的商城基本都有热门搜索词这个功能高挂在页面的头部,比如京东、当当和凡客

 

 

 

这里我们假设京东和凡客放的都是真实的数据(其实这些词是后台人为指定的可能性更大),所谓真实数据,就我的理解,显示在这里的词是真正的客户搜索过最多的词,当然前提是这些词点击后都有搜索结果。现在来看看Magento自带的热门搜索关键词,新安装完的Magento工程底部就有一个链接叫搜索关键字,路径是/catalogsearch/term/popular/,人为制造一些搜索后,打开这个页面看一下,你会发现所有词是按照首字母的顺序排的,然后搜索次数越多的词,字体越大,也许这是老外的习惯用法,但并不符合国人的使用习惯。举个例子,你搜索一个“1”,只要有结果,1就会排在所有中文搜索词之前。

打开文件/app/code/core/Mage/CatalogSearch/Block/Term.php,找到_loadTerms方法,在这个方法最后返回值前有一句natcasesort($termKeys)(在1.3中是ksort($this->_terms)),就是这个函数把搜索词重新排序了下,试着注释掉这句,再看结果,前台搜索词终于按搜索次数排了,而且从后台可以看出这些词已经经过过滤,没有搜索结果的词不在其中。

 

protected function _loadTerms() { if (empty($this->_terms)) { $this->_terms = array(); $terms = Mage::getResourceModel('catalogsearch/query_collection') ->setPopularQueryFilter(Mage::app()->getStore()->getId()) ->setOrder('popularity', 'DESC') ->setPageSize(100) ->load() ->getItems(); if( count($terms) == 0 ) { return $this; } $this->_maxPopularity = reset($terms)->getPopularity(); $this->_minPopularity = end($terms)->getPopularity(); $range = $this->_maxPopularity - $this->_minPopularity; $range = ( $range == 0 ) ? 1 : $range; foreach ($terms as $term) { if( !$term->getPopularity() ) { continue; } $term->setRatio(($term->getPopularity()-$this->_minPopularity)/$range); $temp[$term->getName()] = $term; $termKeys[] = $term->getName(); } // natcasesort($termKeys); foreach ($termKeys as $termKey) { $this->_terms[$termKey] = $temp[$termKey]; } } return $this; }

 

magento 开发-- Magento自带的热门搜索关键词功能存在的问题和本土化方案_第1张图片

 

  现在就可以经过修改下模板把热门搜索词放到头部去了,效果参照京东。

 

之前有提到,京东或凡客的热门搜索词有很大可能并不是客户真正搜索最多的词,而是自己指定一些词放在前台,以更好的推广商家自己主推的产品。那Magento能不能做到呢,答案是可以,而且可以做的更好,同样是使用上面的block,Magento可以在后台配置,甚至做到真实数据与自己指定相结合,具体操作下一篇文章再讲。

你可能感兴趣的:(制造,function,商城,产品,Magento)