Magento 1.7 Показать несколько многоуровневых фильтров навигации на одной странице?

Я пытаюсь разместить многоуровневую навигацию в полосе в заголовке, а также в левой боковой панели. Я делаю это, добавляя <block type="catalog/layer_view" template="catalog/layer/view.phtml"/> в блок заголовка моего файла page.xml. Хотя это работает, когда я нажимаю на фильтр, я получаю сообщение об ошибке, которое сводится к тому, что Magento не любит более одного фильтра:

a:5:{i:0;s:64:"You cannot define a correlation name 'device_idx' more than once";i:1;s:3844:"#0 /home/sitea/subdomains/casefun/trunk/lib/Varien/Db/Select.php(281): Zend_Db_Select->_join('inner join', Array, 'device_idx.enti...', Array, NULL)

Далее следует трассировка стека.

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


person Richard Parnaby-King    schedule 01.10.2012    source источник


Ответы (2)


К сожалению, вы не можете отобразить блок Layered Nav более одного раза на одной странице. Каждый раз, когда блок отображается, он применяет фильтры к коллекции продуктов.

Технически вы можете создать настройку, расширив стандартный блок многоуровневой навигации для своего заголовка или левого размещения и добавив правило к НЕ applyFilters, но это непростая задача.

person Slayer Birden    schedule 01.10.2012
comment
Как насчет перезаписи контроллера, применяющего фильтры? Можно ли установить проверку (например, в реестре), чтобы, если фильтр уже был применен, не применять его снова? Если бы это сработало, какой файл мне нужно было бы изменить? - person Richard Parnaby-King; 01.10.2012
comment
Как я уже сказал, это не контроллер, это Блок, который применяет фильтры. Если вам не терпится попробовать, вы можете переместить Mage_Catalog_Block_Layer_Filter_Abstract блок в local получение кода и изменить _initFilter метод. Часть применения — это строка 91: $this->_filter->apply($this->getRequest(), $this); - person Slayer Birden; 01.10.2012

Мне пришлось перезаписать Mage_Catalog_Model_Resource_Layer_Filter_Attribute (в моей локальной папке), чтобы включить класс Singleton: http://codepad.org/i2a1gL8i

Это позволило создать только одну версию каждого фильтра.

Однако возникла новая проблема. В списке примененных в данный момент фильтров каждый фильтр появлялся дважды.

http://i.imm.io/Gk4w.png

Исправление этого было НАМНОГО проще.

В app/design/frontend/default/{theme}/template/catalog/layer/state.phtml добавьте следующую проверку:

<?php $appliedFilters = array(); ?>
<?php foreach ($_filters as $_filter): //existing line ?>
<?php
  if(in_array(strtolower($_filter->getName()), $appliedFilters))
  {
    continue; 
  }
  $appliedFilters[] = strtolower($_filter->getName());
?>

Если фильтр с таким именем уже есть в списке, не указывайте другие фильтры с таким же именем.

person Richard Parnaby-King    schedule 01.10.2012