
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, а теперь открываются. Если такие ссылки уже попали в индекс как ошибки, они станут страницами.
