题
好吧,我的类别只填充了分组产品,我希望这些产品被其关联(和简单)产品的属性过滤。
到目前为止,我已经使用了一个肮脏的解决方法:我只剩下一个简单的产品,可以看到目录,但HTML&CSS隐藏了。
这样,属性出现了,我也可以将它们用于分组产品,但是我注意到,如果当我按价格过滤时,那隐藏的简单产品不会出现,则分层导航消失。
有什么想法或解决方法吗?
谢谢。
解决方案
您需要重写如何 Mage_Catalog_Model_Layer
使用当前产品集合的属性集构建属性集合:
protected function _getSetIds()
{
$key = $this->getStateKey().'_SET_IDS';
$setIds = $this->getAggregator()->getCacheData($key);
if ($setIds === null) {
$setIds = $this->getProductCollection()->getSetIds();
$this->getAggregator()->saveCacheData($setIds, $key, $this->getStateTags());
}
return $setIds;
}
在这种情况下,您需要检查分组产品的产品集合,并返回分组儿童的属性集ID。然后对这些评估 getFilterableAttributes()
:
public function getFilterableAttributes()
{
$setIds = $this->_getSetIds();
if (!$setIds) {
return array();
}
/** @var $collection Mage_Catalog_Model_Resource_Product_Attribute_Collection */
$collection = Mage::getResourceModel('catalog/product_attribute_collection');
$collection
->setItemObjectClass('catalog/resource_eav_attribute')
->setAttributeSetFilter($setIds)
->addStoreLabel(Mage::app()->getStore()->getId())
->setOrder('position', 'ASC');
$collection = $this->_prepareAttributeCollection($collection);
$collection->load();
return $collection;
}
您可能需要处理缓存密钥。我将通过块缓存进行开发,然后对其进行广泛的测试。