Magento:如何在迷你搜索中按名称搜索产品类别

时间:2015-11-25 10:28:08

标签: php magento search zend-framework

我想在Magento的迷你搜索表单中搜索类别。

但不是带有类别列表的下拉列表。 就在我在迷你搜索表单中输入类别名称时,它应该显示此类别中的产品。

示例:

我搜索“套衫”,结果应该包括任何带有类别套衫的产品,即使搜索字符串(“套衫”)与标题和说明不匹配,也包括与普通搜索过滤器匹配的所有产品哪些不属于套头衫

更新1

我想我必须加入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());

有谁知道我怎样才能搜索类别?

这是正确的方法吗?

1 个答案:

答案 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;

下一步是将其放入辅助函数并抽象表名。

也许会有人发现这有用: - )