Frage

Wie würde ich die Schichtnavigation ändern, um nur Attribute für das übergeordnete konfigurierbare Produkt und nicht das Kind zu betrachten?

Kinder- und Elternprodukte haben beide den Attributsatz und es wird an anderen Stellen verwendet. Zum Beispiel haben Produkte alle eine Farbe, einschließlich des Elternteils. Die Farbe des Elternteils ist nicht immer die gleiche wie das des Kindes, aber sie weist auf die Standardfarbe hin. Wenn wir in eine bestimmte Farbe filtern, möchten wir nur Elemente anzeigen, bei denen das übergeordnete über diese Standardfarbe eingestellt ist. Konfigurierbare Produkte sind sichtbar und einfache (Kinder-) Produkte sind versteckt. Es gibt einige individuelle einfache Produkte, die keine Kinder sind und sichtbar sind, die auch funktional bleiben müssen.

War es hilfreich?

Lösung

Mit der Einschränkung, dass Schichtnavigationsänderungen immer komplizierter sind als sie scheinen

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

Es wird auch seine Standardfilter hinzugefügt in

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

Und ein faszinierend benannt getFilterableAttributes

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

Ein Umschreiben einer dieser Methoden wäre ein guter Ausgangspunkt (Hinzufügen eines type=configurable Filter, Einschränkung der filterbaren Attribute usw.)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top