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

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