2

我不确定为什么这不是 Magento 库存功能的一部分,但我希望客户能够通过子 SKU 搜索可配置产品。出于某种原因,Magento 不索引子 SKU。

我发现在app/code/core/Mage/CatalogSearch/Model/Resource/Fulltext.php

$dynamicFields = array(
    'int'       => array_keys($this->_getSearchableAttributes('int')),
    'varchar'   => array_keys($this->_getSearchableAttributes('varchar')),
    'text'      => array_keys($this->_getSearchableAttributes('text')),
    'decimal'   => array_keys($this->_getSearchableAttributes('decimal')),
    'datetime'  => array_keys($this->_getSearchableAttributes('datetime')),
);

我尝试了几种变体,但都没有成功。SKU 是一个“静态”属性,可通过$this->_getSearchableAttributes('static'). 我可以获取所有静态属性,但它不起作用。根据尝试的不同,我要么没有得到结果的变化,要么得到静态属性表不存在的错误(这是有道理的,因为静态属性在产品实体表中)。

有没有人有解决这个问题的建议?

在线研究发现了使用这些值添加隐藏属性的建议,但这不是必需的。我宁愿妥善解决问题。

4

3 回答 3

2

这么多方法可以做到这一点..

但是,我会用一些我认为会更干净的东西来领导,而不是在app/code/core/Mage/CatalogSearch/Model/Resource/Fulltext.php.

问题是您包含该片段之后的行:

    // status and visibility filter
    $visibility     = $this->_getSearchableAttribute('visibility');
    $status         = $this->_getSearchableAttribute('status');
    $statusVals     = Mage::getSingleton('catalog/product_status')->getVisibleStatusIds();
    $allowedVisibilityValues = $this->_engine->getAllowedVisibility();

最终导致:

核心/法师/目录搜索/模型/资源/全文/Engine.php

/**
 * Retrieve allowed visibility values for current engine
 *
 * @return array
 */
public function getAllowedVisibility()
{
    return Mage::getSingleton('catalog/product_visibility')->getVisibleInSearchIds();
}

然后:

core/Mage/Catalog/Model/Product/Visibility.php

 public function getVisibleInSearchIds()
{
    return array(self::VISIBILITY_IN_SEARCH, self::VISIBILITY_BOTH);
}

因此,您需要做的是转到与您的可配置相关联的简单产品,并将可见性更改为“搜索”。

更改与配置关联的简单产品的可见性选项

但是,它现在正在起作用:

佐因克斯! 看起来一点也不漂亮

但是,是的,这看起来一点也不漂亮。下一个任务现在是修改搜索结果,以便当它列出一个简单的产品项目时,它是 a.) 关联到可配置产品 b.) 可见性 ID 显式设置为 Mage_Catalog_Model_Product_Visibility::VISIBILITY_IN_SEARCH,您需要在搜索结果到实际的可配置产品父级(及其其余详细信息,例如图像)。

(我稍后会继续。我的电脑决定让我废话,我写的内容丢失了 50% 以上。甚至是我们修改全文类的部分!该死。待会见。)

于 2014-01-13T08:46:06.437 回答
1

我使用了设置简单产品可见性的方法来搜索。然后代替显示简单的产品加载/显示其父产品。

除了循环性能问题中的前端查询之外,我从来没有发现这个解决方案非常令人满意。所以在又一次敲打它之后,我找到了另一个选择。

我将简单的产品 SKU 添加到分组产品的全文索引中,但同样的方法应该适用于可配置产品。

这是想法:

Mage_CatalogSearch_Model_Resource_Fulltext->_prepareProductIndex

包含

$typeInstance = $this->_getProductTypeInstance($productData['type_id']);
if ($data = $typeInstance->getSearchableData($product)) {
    $index['options'] = $data;
}

因此,通过覆盖产品类型类中的 getSearchableData 方法,您可以将数据添加到全文索引。对于分组产品,我的更新如下:

... extends Mage_Catalog_Model_Product_Type_Grouped
{

/**
 * all child SKUs to search data
 */
public function getSearchableData($product=null)
{
    $searchData = parent::getSearchableData();
    $adapter = Mage::getSingleton('core/resource')->getConnection('core_read');
    $select = $adapter->select()
        ->from(
            array('p' => Mage::getSingleton('core/resource')->getTableName('catalog/product')),
            array('sku')
        )
        ->joinLeft(
            array('r' => Mage::getSingleton('core/resource')->getTableName('catalog/product_relation')),
            'r.child_id = p.entity_id',
            array()
        )
        ->where('r.parent_id = ?', $this->getProduct($product)->getId());
    $query = $adapter->query($select);
    while ($row = $query->fetch()) {
        $searchData[] = $row['sku'];
    }
    return $searchData;
}

重新索引的搜索和 catalogsearch_fulltext.dataindex 应该包含额外的数据。

于 2014-05-25T07:34:36.640 回答
0

有一个解决方案,但它是一个付费扩展(我们许可它),它没有内置到 Magento 标准中,因此您不能按子属性搜索并只返回父可配置/分组/捆绑产品。

于 2014-01-23T12:08:09.563 回答