Question

Comment pourrais-je aller sur la modification de navigation en couches seulement regard sur les attributs du produit configurable mère, et non l'enfant?

produits enfant et le parent ont tous deux l'ensemble d'attributs et il est utilisé dans d'autres endroits. Par exemple, les produits ont tous une couleur, y compris le parent. La couleur du parent ne sont pas toujours les mêmes que les années de l'enfant, mais il est révélateur de la couleur par défaut. Lorsque l'on filtre à une couleur spécifique, nous voulons seulement montrer les éléments où le parent est défini sur cette couleur par défaut. produits configurables sont visibles et produits sont cachés de simples (enfants). Il y a quelques produits simples individuels qui ne sont pas des enfants et visibles qui doivent également rester fonctionnels.

Était-ce utile?

La solution

Avec la mise en garde que les changements de navigation en couches sont toujours plus compliquées qu'elles ne paraissent, la collection de produits pour la navigation en couches est instancié dans

#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;
}

Il a également ses filtres par défaut ajoutés dans

#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;
}

Et un getFilterableAttributes intrigant nommé

#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;
}

Une réécriture de l'une quelconque de ces méthodes serait un bon point de départ (en ajoutant un filtre type=configurable, ce qui limite les attributs filtrables, etc.)

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top