我不确定为什么这不是 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')
访问。我可以很好地获取所有静态属性,但它不起作用。根据尝试的结果,我要么结果没有变化,要么出现静态属性表不存在的错误(这是有道理的,因为静态属性位于产品实体表中)。
有人有解决这个问题的建议吗?
在线研究发现了添加具有这些值的隐藏属性的建议,但这不是必需的。我宁愿妥善解决问题。
最佳答案
有很多方法可以做到这一点..
但是,我会以我认为更简洁的方式开头,而不是在 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();
最终导致:
core/Mage/CatalogSearch/Model/Resource/Fulltext/Engine.php
/**
* Retrieve allowed visibility values for current engine
*
* @return array
*/
public function getAllowedVisibility()
{
return Mage::getSingleton('catalog/product_visibility')->getVisibleInSearchIds();
}
然后:
核心/法师/目录/模型/产品/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% 的内容。甚至我们修改全文类的部分!该死。稍后见。)
关于magento - 将子 SKU 添加到 Magento 全文搜索索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21034514/