グループ化された製品のみの階層型ナビゲーションフィルター
-
16-10-2019 - |
質問
まあ、私はグループ化された製品のみで満たされたカテゴリを持っています、そして、私はこれらの製品を関連する(そして単純な)製品の属性によってフィルタリングすることを望んでいます。
これまで、私は汚れた回避策を使用していました。カタログに見えるように見えるが、HTML&CSSによって隠されている単純な製品は1つだけ残っていました。
そうすれば、属性が表示されており、グループ化された製品にも使用できますが、価格でフィルタリングすると隠された単純な製品が表示されない場合、レイヤードナビゲーションが明らかになっていることに気付きました。
何かアイデアや回避策はありますか?
ありがとう。
解決
どのように書き直す必要があります 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;
}
キャッシュキーに対処する必要がある可能性があります。ブロックキャッシングをオフにして開発し、それを使用して広範囲にテストします。
所属していません magento.stackexchange