Ignorando Bambino attributi di prodotto in Layered Navigation
-
16-10-2019 - |
Domanda
Come potrei fare su come modificare la navigazione a strati a un solo sguardo attributi del prodotto configurabile genitore, e non il bambino?
Bambino e genitore prodotti hanno entrambi il set di attributi ed è utilizzato in altri luoghi. Ad esempio, i prodotti hanno tutti un colore, tra cui il genitore. Il colore del genitore non è sempre lo stesso come il bambino di, ma è indicativo del colore predefinito. Quando abbiamo filtro a un colore specifico vogliamo solo mostrare gli elementi in cui il genitore è impostato su quel colore predefinito. prodotti configurabili sono visibili e semplici prodotti (bambino) sono nascosti. Ci sono alcuni singoli prodotti semplici che non sono i bambini e sono visibili, che deve anche rimanere funzionale.
Soluzione
Con l'avvertenza che i cambiamenti di navigazione a strati sono sempre più complicate di quello che sembrano, la collezione di prodotti per la navigazione a strati viene creata un'istanza in
#File: app/code/core/Mage/Catalog/Model/Layer.php
public function getProductCollection()
{
if (isset($this->_productCollections[$this->getCurrentCategory()->getId()])) {
$collection = $this->_productCollections[$this->getCurrentCategory()->getId()];
} else {
$collection = $this->getCurrentCategory()->getProductCollection();
$this->prepareProductCollection($collection);
$this->_productCollections[$this->getCurrentCategory()->getId()] = $collection;
}
return $collection;
}
E 'anche i suoi filtri predefiniti aggiunto
#File: app/code/core/Mage/Catalog/Model/Layer.php
public function prepareProductCollection($collection)
{
$collection
->addAttributeToSelect(Mage::getSingleton('catalog/config')->getProductAttributes())
->addMinimalPrice()
->addFinalPrice()
->addTaxPercents()
->addUrlRewrite($this->getCurrentCategory()->getId());
Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($collection);
Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($collection);
return $this;
}
E un getFilterableAttributes
intrigante di nome
#File: app/code/core/Mage/Catalog/Model/Layer.php
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;
}
Una riscrittura di uno qualsiasi di questi metodi sarebbe un buon punto di partenza (l'aggiunta di un filtro type=configurable
, limitando gli attributi filtrabili, ecc.)