我想在Magento的迷你搜索表单中搜索类别。
但不是带有类别列表的下拉列表。 就在我在迷你搜索表单中输入类别名称时,它应该显示此类别中的产品。
示例:
我搜索“套衫”,结果应该包括任何带有类别套衫的产品,即使搜索字符串(“套衫”)与标题和说明不匹配,也包括与普通搜索过滤器匹配的所有产品哪些不属于套头衫
我想我必须加入prepareResult()
Mage_CatalogSearch_Model_Resource_Fulltext
有一个块,其中定义了$ select对象:
$select = $adapter->select()
->from(array($mainTableAlias => $this->getMainTable()), $fields)
->joinInner(array('e' => $this->getTable('catalog/product')),
'e.entity_id = s.product_id',
array())
->where($mainTableAlias.'.store_id = ?', (int)$query->getStoreId());
有谁知道我怎样才能搜索类别?
这是正确的方法吗?
答案 0 :(得分:0)
我努力实现这一点。 这是第一个" hacky"解决我的问题:
我覆盖Mage_CatalogSearch_Model_Resource_Fulltext->_prepareProductIndex()
在in_stock的测试和返回之间插入了类似的东西:
$query = "
SELECT `cv`.`value`
FROM `catalog_category_entity_varchar` AS `cv`
LEFT JOIN `catalog_category_product` AS `ccp`
ON (`ccp`.`category_id` = `cv`.`entity_id`)
WHERE `ccp`.`product_id` = " . $this->_getReadAdapter()->quote($productData['entity_id']) . "
AND `cv`.`store_id` = " . $this->_getReadAdapter()->quote($queryStoreId) . "
AND `cv`.`attribute_id` = (
SELECT `attribute_id` FROM `eav_attribute` WHERE `attribute_code` = 'name' AND `entity_type_id` = 3
);
";
$categories = array();
foreach ($this->_getReadAdapter()->fetchAll($query) as $result)
$categories[] = html_entity_decode($result['value']); // HACK!!!
$index['categories'] = $categories;
下一步是将其放入辅助函数并抽象表名。
也许会有人发现这有用: - )