Когда и как Magento вычисляет результаты пошаговой фильтрации

[16 июля 2019 г.]    Российская сборка Magento 2.52.2
Magento 2: модули и услуги
magereport.com: составление перечня необходимых для установки заплаток SUPEE
#1 Ярослав Федорук
  • Группа: Пользователь
  • Сообщений: 26
  • Регистрация: 23.01.2011

13.03.2011 19:10

Столкнулся с проблемой при попытке расширить фильтрацию в Magento. В дефолтном варианте, при выборе какого-нибудь фильтра, например manufacturer, пропадает возможность фильтровать продукты еще раз по этому атрибуту. То есть, фильтр появившийся в блоке Mage_Catalog_Block_Layer_State, исчезает из блока Mage_Catalog_Block_Layer_View. Где именно стоит условие, убирающее активный фильтр из общего списка фильтров, найти не удалось. Если есть какие-нибудь мысли хотя бы в каком направлении искать решение этой проблемы, буду весьма признателен.

#2 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8995
  • Регистрация: 20.02.2010

14.03.2011 07:47

Чтобы изменить значение фильтра для атрибута с уже заданным ранее значением фильтра, в стандартной теме Default надо нажать крестик рядом с выбранным значением атрибута.
Прикрепленное изображение: layered-navigation.png

#3 Ярослав Федорук
  • Группа: Пользователь
  • Сообщений: 26
  • Регистрация: 23.01.2011

14.03.2011 11:22

Спасибо за ответ. Проблема немного в другом. На рисунке выбран фильтр "Color". Он появляется в CURRENTLY SHOPPING BY: (это блок Mage_Catalog_Block_Layer_State), но исчезает из SHOPPING OPTIONS (Mage_Catalog_Block_Layer_View). Я же, пытаюсь сделать "rewrite" стандартного модуля фильтрации, что бы можно было одновременно фильтровать например Color: Green и Color: Black. В стандартной Magento такое невозможно. Я пытался дополнительно добавлять в список фильтров активный фильтр, но это привело только к дублированию активного фильтра
Currently Shopping By:
Colour:
Green
Colour:
Green
а в Mage_Catalog_Block_Layer_View он все равно не появляется.

#4 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8995
  • Регистрация: 20.02.2010

14.03.2011 20:41

Magento заранее, на этапе индексации, определяет множество допустимых для фильтрации атрибутов (характеристик) для данного конкретного состояния фильтрации.

Когда же покупатель смотрит витрину, Magento вовсе не вычисляет фильтры, а пользуется уже подготовленными заранее результатами: Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Attribute_Collection::addIsFilterableFilter

#5 IgorN
  • Группа: Пользователь
  • Сообщений: 293
  • Регистрация: 09.03.2011

15.03.2011 15:29

Ярослав, вам удалось решить задачу? Если да то поделитесь кодом.

#6 Ярослав Федорук
  • Группа: Пользователь
  • Сообщений: 26
  • Регистрация: 23.01.2011

29.05.2011 22:05

Просмотр сообщенияIgorN (15.03.2011 15:29) писал:

Ярослав, вам удалось решить задачу? Если да то поделитесь кодом.

Игорь, приводить код вобще говоря не имею права, так как не я один писал его. Но опишу в общих чертах как я решил эту задачу. Может кто-то предложит более разумный варинат, но, судя по всему, мадженто не поддерживает такой вариант фильтрации, поэтому единственный выход здесь - писать собственные фильтры. Пришлось полностью отказаться от стандартной фильтрации и вручную парсить урл, выбирть нужные атрибуты, считать количество. Из catalog/layer/ я полностью выкинул шаблоны state.html и filter.html. Весь вывод на фронтенд пошел через view.html в котором и выводилось все что нужно.
В отдельном массиве - выводил активные фильтры: через парсинг урл, проверял какой именно,
а ниже выводились все неактивные.
Ну например: в массиве color[] сохраняем все фильтры для атрибута "color". И если в урл встречаем color=black, то перемещаем элемент массива color["black"] из массива color в массив activeColor. А далее в начале шаблона выводим activeColor, а потом благополучно массив color, таким образом и решая задачу.

Поделиться темой: