
mFilter 1.9.0
Версия про то, чтобы выдача не подменялась молча. Форма без настроек вызова сниппета больше не показывает чужие данные, настройки закэшированной страницы не истекают через сутки, а SEO-шаблоны подставляют названия вместо идентификаторов. Числа у значений обновляются сразу после правки товара, а ошибки в админке стали видны.
Исправления
- Форма без настроек вызова сниппета подменяла выдачу. AJAX находит параметры вызова
mFilter— элемент, чанки, лимит, условия — по хешу из разметки. Если хеша не было или по нему ничего не находилось, сервер молча отвечал стандартными чанками и всеми опубликованными ресурсами под страницей. На каталоге с&elementпосле первого клика в выдаче появлялись категории вперемешку с товарами. Теперь хеш обязателен: без него страница не отправляет запрос и пишет в консоль браузера, что добавить вtplOuter. На хеш, по которому ничего нет, сервер отвечает ошибкой 410 с объяснением. - Через сутки после отрисовки страницы фильтрация «сбрасывала шаблон». Параметры вызова сниппета хранились сутки, а страница с их хешем живёт в кэше MODX дольше. На следующий день первый клик не находил параметров, и выдача рисовалась стандартными чанками с лимитом 20. Теперь найденные параметры не истекают, а продлеваются, и каталог больше не пишет в базу на каждой отрисовке.
- Сортировка пропадала из адреса после первого выбора фильтра. Страница, открытая с сортировкой (
/catalog/sort--price-asc/), теряла её в адресе после первого AJAX-запроса: выдача оставалась отсортированной, ссылка — нет. В режиме SEO-адресов заодно перестали теряться?sort=и?limit=. - Блок производителей пропадал с формы. При
sort: countилиsort: value— в том числе по рецепту из документации — фильтр производителей исчезал, аpinned,custom_orderиselected_firstу него не работали. Теперь производители сортируются так же, как значения других типов, аpinnedиcustom_orderнаходят их и по названию. - Числа у значений не обновлялись после сохранения товара. Сохранение и удаление товара и синхронизация индекса по расписанию оставляли старый кэш, и категория до часа показывала прежние числа. Теперь кэш значений и счётчиков сбрасывается у страниц каталога, в дерево которых попадает товар. Категория, из которой товар перенесли, пока ждёт истечения кэша.
- SEO-шаблон подставлял идентификаторы вместо названий. Производитель, раздел, категория товара и TV со списком ресурсов попадали в шаблон и индивидуальную запись числом: «Диваны — 3». Теперь название определяется по типу фильтра — и производитель под ключом
brandтоже получает имя. - Ошибки в админке показывались ключом лексикона или не показывались вовсе. Вместо текста в уведомлении стоял ключ вроде
mfl_slug_not_found, а ошибка сохранения в редакторах уходила только в консоль браузера — окно просто не закрывалось. Теперь сообщения приходят текстом, а ошибка сохранения — уведомлением с причиной.
Новые возможности
sort: label— сортировка значений по подписи, которую видит посетитель.pinnedиcustom_orderпринимают и значения, и подписи. Текст сравнивается без учёта регистра для любого алфавита. Подробнее — Сортировка значений фильтра.{$ключ_raw}в SEO-шаблоне — значение фильтра до подстановки названия. У производителя или раздела это идентификатор: для ссылки[[~{$parent_raw}]]или словоформы, заведённой на идентификатор. Подробнее — SEO-шаблоны.
Внимание при обновлении
Страница без data-mfilter-hash не фильтрует
Если в разметке выдачи нет data-mfilter-hash, страница больше не отправляет AJAX-запросы. Перестают работать фильтры, сортировка, лимит, переключатель вида, «Показать ещё», бесконечная прокрутка, чипы mFilterSelected, сброс, переходы Назад и Вперёд. Ссылки пагинации работают обычным переходом. В консоли браузера — ошибка с подсказкой.
Затронет свой чанк tplOuter без атрибута и обёртку выдачи, перенесённую из чанка в шаблон ресурса. Стандартный mfilter.outer атрибут содержит. Если вы ставили mFilter до 1.1.2 и не меняли mfilter.outer — при обновлении чанки не перезаписываются, — откройте исходный код страницы каталога и проверьте, что data-mfilter-hash не пуст. Подробнее — Обязательные точки подключения.
Запросы без хеша из своего кода — mfilter.api.apply(), Headless API — работают как прежде.
Названия вместо идентификаторов в SEO-шаблонах
Значения производителей, разделов, категорий товаров и TV со списком ресурсов теперь подставляются в SEO-шаблон и индивидуальную запись названием. Если шаблон рассчитывал на число, поправьте его:
- словоформы, заведённые на идентификатор (значение
3), больше не находятся — заведите их на название или пишите{$ключ_raw.gen}; - идентификатор внутри тега MODX, например ссылка
[[~{$parent}]], превратится в название, и ссылка сломается — пишите[[~{$parent_raw}]]; - опция или TV с ключом
parent,categoryилиvendor_idи числовыми значениями теперь подставляет название ресурса или производителя с таким номером — исходное значение доступно как{$parent_raw}и т. п.
sort: value у производителей и разделов
У типов, где значение — идентификатор (производители, «Родители», «Категории товаров»), sort: value теперь сортирует по названию, а не по номеру. У производителей недокументированный sort: id раньше упорядочивал по номеру, теперь оставляет порядок по имени.
