我已经尝试了几个小时来成功重写 Magento 的内置 Autosuggest 函数,以便它显示产品名称而不是查询历史记录条目。我不想要任何花哨的东西,没有产品图片等等,只是简单的产品名称建议。
因此,为了获取产品名称,我在app/code/local/Aw
该文件夹下CatalogSearch/Model
创建并创建了一个名为Query.php
. 在该文件中,我有以下类和重写方法:
class Aw_CatalogSearch_Model_Query
extends Mage_CatalogSearch_Model_Query {
public function getSuggestCollection() {
$collection = $this->getData('suggest_collection');
if (is_null($collection)) {
$collection = Mage::getModel('catalog/product');
Mage::getSingleton('catalog/product_status')
->addVisibleFilterToCollection($collection);
$collection->getCollection()
->addAttributeToSelect('name')
->addAttributeToFilter('name', array('like' =>
'%'.$this->getQueryText().'%'))
->addExpressionAttributeToSelect('query_text', '{{name}}', 'name')
->addAttributeToSort('name', 'ASC')
->setPageSize(10)
->addStoreFilter($this->getStoreId());
$this->setData('suggest_collection', $collection);
}
return $collection;
}
};
我在 app/etc/modules/ 中创建了模块 xml 文件,并在app/code/local/Aw/CatalogSearch/etc/config.xml
到目前为止一切都很好,被覆盖的方法getSuggestCollection()
被执行了。
问题app/code/core/Mage/CatalogSearch/Block/Autocomplete.php
出在getSuggestData()
方法上。
public function getSuggestData()
{
if (!$this->_suggestData) {
$collection = $this->helper('catalogsearch')->getSuggestCollection();
$query = $this->helper('catalogsearch')->getQueryText();
$counter = 0;
$data = array();
foreach ($collection as $item) {
$_data = array(
'title' => $item->getQueryText(),
'row_class' => (++$counter)%2?'odd':'even',
'num_of_results' => $item->getNumResults()
);
if ($item->getQueryText() == $query) {
array_unshift($data, $_data);
}
else {
$data[] = $_data;
}
}
$this->_suggestData = $data;
}
return $this->_suggestData;
}
当它遍历集合时,我得到一个
Call to a member function getQueryText() on a non-object ...
我不明白的一点是,我在getSuggestCollection()
方法内的集合查询中定义了一个名为“query_text”的别名字段。即使当我使用类似getData('query_text')
或$item->getQuery_text()
获取该字段的数据时也无法正常工作。我有强烈的感觉,集合对象在类的 getSuggestData() 方法中应该是无效的Mage_CatalogSearch_Block_Autocomplete
。
谁能指出我如何解决这个问题?是否不可能像上述方式从产品集合中收集建议并将这些建议传递给 Autocomplete.php?
这是我的第一个 magento 项目,所以请多多包涵!我真的迷失了这个!
非常感谢任何提示。
本项目使用 Magento 1.7.0.2。