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能不能做到呢,答案是可以,而且可以做的更好,同樣是使用上麵的block,Magento可以在後台配置,甚至做到真實數據與自己指定相結合,具體操作下一篇文章再講。
最後更新:2017-04-02 05:21:05