
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-шаблоне — значение фильтра до подстановки названия. У производителя или раздела это идентификатор — для словоформы, заведённой на идентификатор. Подробнее — 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}; - опция или TV с ключом
parent,categoryилиvendor_idи числовыми значениями теперь подставляет название ресурса или производителя с таким номером — исходное значение доступно как{$parent_raw}и т. п.
sort: value у производителей и разделов
У типов, где значение — идентификатор (производители, «Родители», «Категории товаров»), sort: value теперь сортирует по названию, а не по номеру. У производителей недокументированный sort: id раньше упорядочивал по номеру, теперь оставляет порядок по имени.
mFilter 1.9.1
Патч к 1.9.0: порядок товаров на странице и сортировка в поиске, настройка mfilter.default_limit, которая не действовала, и параметр offset.
Исправления
- Товары из дополнительных категорий шли на странице по id. Каталог с
&element=msProductsиsortby=menuindex: товары, добавленные в раздел как в дополнительную категорию MiniShop3, выводились по возрастанию id, а не в порядке, заданном в админке. Набор товаров на странице был правильным, неверным — порядок внутри неё. Теперь страница выводится в том порядке, который mFilter получил при выборке, без повторной сортировки. - На странице поиска выбор сортировки менял порядок только внутри страницы. Результаты mSearch набирались по релевантности, а выбранная сортировка пересортировывала каждую страницу отдельно: при «сначала дорогие» часть дорогих товаров оказывалась на второй странице. Теперь выбранная сортировка упорядочивает весь результат поиска, без неё — релевантность.
- Настройка
mfilter.default_limitне действовала. Число товаров на странице задавало свойство сниппетаlimit = 20: администратор ставил 24, а выводилось 20. Теперь свойство по умолчанию пустое: пустое — действует настройка, заполненное — перекрывает её,&limitв вызове главнее всех. Пустая настройка даёт 20, а не весь каталог одной страницей. - Параметр
offsetработал по-разному в разных режимах. С&elementон обрезал начало каждой страницы, без&elementтерялся после первого AJAX-запроса. Теперь в обоих режимахoffsetпропускает первые N товаров выдачи. Как в pdoPage: «Найдено» считает все товары, число страниц — оставшиеся послеoffset.
Внимание при обновлении
Страницы из кэша MODX и offset
Страница, закэшированная до обновления, хранит прежние настройки вызова: с &element первая отрисовка из кэша покажет укороченную страницу, без &element AJAX начнёт список сначала. Если в вызове есть offset, очистите кэш сайта после обновления.
Свойство limit сниппета mFilter
Свойства сниппета при обновлении пакета перезаписываются — так было и раньше. Если в свойство limit было вписано своё число, после обновления оно станет пустым, и лимит будет браться из mfilter.default_limit. Своё значение задайте в настройке или параметром &limit в вызове.
Свой сниппет вместо msProducts или pdoResources
При выводе страницы mFilter передаёт элементу id страницы в resources и пустой sortby. Собственный элемент, который сортирует сам, должен в этом случае сохранять порядок resources — см. Требования к element.
