filtri di navigazione Layered per i prodotti raggruppati solo
-
16-10-2019 - |
Domanda
Bene, Sto avendo una categoria riempita solo con prodotti raggruppati e voglio questi a essere filtrati dai loro associati (e semplici) gli attributi dei prodotti.
Fino ad ora ho usato una soluzione sporca: ho lasciato solo un semplice prodotto per essere visibili a catalogo, ma nascosto da html e CSS.
In questo modo gli attributi sono stati comparendo e li ho potuto usare per i prodotti raggruppati anche, ma ho notato che scompare di navigazione a strati se questo prodotto semplice nascoste non vengono visualizzate quando ho Filtra per prezzo.
Tutte le idee o soluzioni alternative?
Grazie.
Soluzione
È necessario riscrivere come Mage_Catalog_Model_Layer
costruisce la raccolta di attributo utilizzando i set di attributi della collezione corrente del prodotto:
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;
}
Per questo contesto, ti consigliamo di controllare la raccolta del prodotto per i prodotti raggruppati e restituire gli ID set di attributi di bambini raggruppati. Questi vengono poi valutati in 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;
}
È probabile che sia necessario affrontare con la chiave di cache. Vorrei sviluppare con blocco di caching off e poi prova a lungo con su.