Skip to content
mFilter
mFilter
Фасетная фильтрация для MODX 3 с поддержкой SEO URL
  • MODX 3
  • PHP 8.1
  • Vue 3
  1. Компоненты
  2. mFilter

mFilter 1.7.0

Исправления по следам обращений: каталог отдавал пустую страницу там, где разметку собирает Fenom, а фильтры в подразделах показывали значения соседних разделов.

Исправления

  • Значения фильтров по TV не ограничивались разделом. В подразделе каталога фильтр показывал значения всего каталога: вес в килограммах рядом с весом в тоннах, ползунок с границами по всем товарам сразу. Область выборки определялась в каждом источнике и типе фильтра по-своему; теперь правило одно: товары после фильтрации, иначе товары страницы, иначе разделы.
  • Скрытый ключ у фильтров «Год», «Месяц» и «День месяца» давал адрес, который отдавал 404. Фильтрация строила /catalog/2026/ или /catalog/2026-03/, а переход по такому адресу заканчивался ошибкой: сегмент без ключа узнаётся по слагу значения, а год, месяц и день слага не получают — они и так годятся для адреса. Теперь такой сегмент узнаётся по виду значения. У типов со свободными значениями — «Стандартный», «Числовой», «Булев» — скрытый ключ по-прежнему не работает: отличить значение от случайных цифр там нечем.
  • Страница под разделом с фильтрами была недоступна, если её адрес разбирался как фильтр. Страница с адресом /catalog/seryj/ рядом с фильтром «Цвет», у которого скрыт ключ, отдавала отфильтрованный каталог вместо себя. Теперь существующая страница важнее фильтра.
  • Пустая страница на сайтах, где разметка собирается через Fenom. Атрибуты формы уходили в страницу без экранирования, и фигурная скобка в любом из них — в списке активных фильтров, в разделителях из системных настроек, в адресе раздела — ломала сборку страницы: пустой ответ и ошибка компиляции в логе. Чаще всего это ловили при кэшируемом вызове [[mFilterForm]]: разметка формы попадает в кэш ресурса и разбирается вместе со страницей. Теперь значения атрибутов экранируются так же, как это делает модификатор esc.
  • JSON внутри <script> ломал сборку страницы так же. Это отладочный профайлер сниппета mFilter и микроразметка хлебных крошек. Там HTML-экранирование не подходит, поэтому скобки в таком JSON записываются иначе — на чтение из JavaScript это не влияет. Если микроразметку собрать не удалось, теперь она не выводится вовсе, а причина пишется в лог: раньше в страницу попадал пустой объект, который поисковые системы считают сломанной разметкой.

Внимание при обновлении

Значения фильтров в подразделах

В подразделах из фильтров пропадут значения соседних разделов, а числа рядом с оставшимися изменятся — это и есть исправление. Проверьте сайты, где на прежний состав значений опирались: чанк, который ждёт конкретное значение, или SEO-текст, перечисляющий опции.

Страница важнее фильтра

Если адрес совпадает и с существующей страницей, и с фильтром, теперь открывается страница. Раньше выигрывал фильтр, а страница была недоступна. Проверьте сайты, где алиас дочерней страницы совпадает со слагом значения фильтра: такой адрес сменит содержимое.

Новый метод у типов фильтров

FilterTypeInterface пополнился методом acceptsUrlSegment() — им тип отвечает, может ли сегмент адреса быть его значением, когда ключ фильтра скрыт. Свои типы, унаследованные от AbstractFilterType, менять не нужно: там есть реализация по умолчанию, отвечающая «нет». Тип, который реализует интерфейс напрямую, нужно дополнить этим методом.

Ещё одно следствие: адреса со скрытым ключом у фильтров «Год», «Месяц» и «День месяца» раньше отдавали 404, а теперь открываются. Если такие ссылки уже попали в индекс как ошибки, они станут страницами.