我不确定为什么这不是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')
访问。获取所有静态属性我很好,但它不起作用。根据尝试的结果,我不会对结果进行任何更改,也不会出现静态属性表不存在的错误(这是有意义的,因为静态属性位于产品实体表中)。
有人有建议解决这个问题吗?
在线研究已经找到了使用这些值添加隐藏属性的建议,但这不应该是必需的。我宁愿正确解决问题。
答案 0 :(得分: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();
最终导致:
核心/法师/ CatalogSearch /型号/资源/全文/ 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);
}
因此,您需要做的是转到与您的可配置相关联的简单产品,并将可见性更改为“搜索”。
但是,现在它正在采取行动:
然而,是的,这看起来并不漂亮。下一个业务顺序现在正在修改搜索结果,以便在列出与可配置产品相关联的简单产品项时b。)可见性ID显式设置为Mage_Catalog_Model_Product_Visibility :: VISIBILITY_IN_SEARCH,您需要呈现该项目将结果搜索到实际的可配置产品父级(以及其余的详细信息,例如图像)。
(我稍后会继续这样做。我的电脑决定扯掉我,我失去了50%以上的写作。甚至我们修改全文课程的部分!Darn。稍后见。)< / p>
答案 1 :(得分: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应包含其他数据。
答案 2 :(得分:0)
有一个解决方案,但它是一个付费扩展(我们许可它),它没有内置到Magento标准,所以你不能搜索子属性,只返回父可配置/分组/捆绑产品。