Добавление многоуровневого блока навигации на пользовательскую страницу

9

В Magento блок Layered Navigation прекрасно работает на странице со списком продуктов.

Как можно успешно скопировать этот блок на пользовательскую страницу, где есть пользовательский список продуктов?

Примечание. Простое добавление блока в XML и вызов его getChildHtml('blockname')не поможет.

pzirkind
источник
2
Вам необходимо добавить категорию по умолчанию в код блока многоуровневой навигации, так как многоуровневая навигация строится из продуктов текущей категории.
Сандер Мангель
+1 за помощь, что, если есть несколько продуктов из нескольких категорий (например, продукты сделки)?
pzirkind
2
Я бы сделал специальную категорию для этого. Могут быть и другие способы, но это определенно самый простой и масштабируемый!
Sander Mangel
1
Если вы действительно хотите, то вам придется создать собственную категорию. Многоуровневая навигация действительно предполагает наличие категории для работы, она не потребует простой ProductCollection без переопределения целого ряда классов.
Рик Кейперс

Ответы:

5

В основном, что вы должны сделать, это extend/overwriteиз Mage_Catalog_Block_Product_List (List.php) и переписать getProductCollection()метод:

protected function _getProductCollection()
{
    if (is_null($this->_productCollection)) {
        // Build collection and set it
        $collection = "...";
        $this->setProductCollection($collection);
    }

    return $this->_productCollection;
}

Когда это было сделано, я переписал и Mage_Catalog_Model_Layerкласс, и класс Mage_Catalog_Model_Categoryи ввел новую переменную:

protected $_customProductCollection;

Я переписал getProductCollection()в обоих классах, и я добавил это в начале метода:

if(isset($this->_customProductCollection)){
    return $this->_customProductCollection;
}

У меня также есть метод, который позволяет мне установить это "customProductCollection"внутри обоих этих классов. Как только он установлен, остальные данные многоуровневой навигации / категории основаны на этой коллекции.

Проверьте первоначальный вопрос + ответ здесь .

Удачи ;)

Kenny
источник
Что это за метод для установки коллекции customproductcollection и откуда вы ее вызываете?
easymoden00b