Игнорирование атрибутов дочернего продукта в слоистой навигации

magento.stackexchange https://magento.stackexchange.com/questions/5371

Вопрос

Как бы я мог бы изменить слоистую навигацию, чтобы посмотреть только на атрибуты на родительском настраиваемом продукте, а не на ребенка?

Детские и родительские продукты имеют набор атрибутов, и он используется в других местах. Например, все продукты имеют цвет, включая родителя. Цвет родителей не всегда такой же, как у ребенка, но он свидетельствует о цвете по умолчанию. Когда мы фильтруют в определенный цвет, мы хотим показывать элементы, в которых родитель устанавливается на этот цвет по умолчанию. Настраиваемые продукты видны, а простые (детские) продукты скрыты. Есть некоторые отдельные простые продукты, которые не являются детьми и видны, которые также должны оставаться функциональными.

Это было полезно?

Решение

С предостережением, что слоистые изменения навигации всегда сложнее, чем они кажутся, сбор продуктов для слоистой навигации создается в

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

В нем также добавлены фильтры по умолчанию в

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

И интригующе названный 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;
}

Переписание любого из этих методов было бы хорошим местом для начала (добавление type=configurable Фильтр, ограничение фильтруемых атрибутов и т. Д.)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top