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

Наборы фильтров ​

Набор фильтров отвечает на два вопроса: какие фильтры показывать и на каких страницах. Наборы создаются на вкладке «Наборы фильтров» — с них начинается настройка mFilter.

Список наборов ​

СтолбецЧто показывает
СтраницыСколько страниц привязано к набору
ФильтрыСколько фильтров в наборе
НаследованиеДействует ли набор на дочерних страницах привязанных
ПорядокТолько порядок строк в этом списке. На выбор набора для страницы не влияет: там решают привязка и наследование
СтатусВыключенный набор не действует ни на одной странице

Кнопка «Пересобрать кэш» заново строит карту «страница → набор». При сохранении и удалении набора она перестраивается сама; кнопка нужна, когда дерево ресурсов меняли в обход админки.

Фильтры ​

Таблица фильтров — четыре колонки: «Ключ», «Источник», «Тип», «Заголовок». Порядок строк — порядок блоков в форме, строки перетаскиваются.

  • Ключ — имя, под которым фильтр приходит в запросе и попадает в адрес: /catalog/made_in--germaniya/. В подсказках — ключи, у которых уже есть слаги.
  • Источник и Тип подставляются по ключу, когда вы его вводите или меняете. Заданные до этого значения при смене ключа перезаписываются.
  • Заголовок — подпись над блоком. Если пусто, берётся подпись TV или опции MiniShop3, а при их отсутствии — название из лексикона.

Две строки не могут занять один ключ: сохранение отклоняется и показывает номера строк. Если ключ фильтра отличается от его поля, он виден под полем — например, у фильтра {"brand": {"field": "product_brand"}} в колонке стоит product_brand, а под ним подсказка «Ключ фильтра: brand».

Источники ​

ИсточникОткуда значения
miniShop3 — данные товаровКолонки товара: price, old_price, article, made_in, vendor_id, new…
miniShop3 — опцииОпции товаров: цвет, размер и остальные
Template VariablesЗначения TV
Поля ресурсовПоля ресурса MODX: pagetitle, template, parent, publishedon…

Источники MiniShop3 доступны, только если он установлен.

Подписи значений TV ​

Подпись рядом со значением берётся из поля «Возможные значения» самого TV. Список пишется как в MODX: в записи Красный==red значение red получит подпись «Красный», а без == подпись совпадает со значением.

Вместо списка можно поставить привязку:

ПривязкаЧто делает
@SELECT pagetitle, id FROM [[+PREFIX]]site_content WHERE parent = 5Первая колонка — подпись, вторая — значение
@CHUNK имя, @FILE путьСодержимое разбирается как обычный список
@EVALНе выполняется: запускает произвольный код

[[+PREFIX]] в запросе заменяется на префикс таблиц сайта — с ним привязку можно перенести на другой сайт как есть.

Запрос в @SELECT должен быть один. Второй оператор ищется по точке с запятой, поэтому запись, где точка с запятой стоит внутри строки — CONCAT(pagetitle, '; ', longtitle), — тоже отклоняется, хотя сам MODX её выполняет. Такую привязку перепишите без точки с запятой.

Подписи попадают в базу при индексации TV, а она запускается кнопкой «Сгенерировать» на вкладке «Алиасы». После правки поля «Возможные значения» нажмите её, иначе в фильтре останутся прежние подписи.

TV со списком ресурсов — особый случай: поле «Возможные значения» у него пустое, список задаётся настройками ввода (родитель, глубина), а хранит он идентификаторы страниц. Подпись для таких значений берётся из названия страницы, писать привязку не нужно.

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

Название запоминается при индексации, поэтому переименование самой страницы до фильтра сразу не доходит: пока индекс не пересобран, в фильтре останется прежнее. Запускает пересборку кнопка «Переиндексация» в шапке админки или сохранение товара с этим значением.

TV с несколькими значениями ​

TV, в котором выбрано несколько значений, хранит их одной строкой: Красный||Синий. mFilter раскладывает её на отдельные значения: в фильтре стоят «Красный» и «Синий», а не их сочетание, и товар находится по любому из своих значений.

Тип ввода TVРазделитель
Теги: tag, autotagЗапятая
Остальные: список с множественным выбором, флажки, текстовое поле||

Раскладывать ли строку, решают данные, а не тип ввода: текстовое поле, которое импорт заполнил строкой Красный||Синий, разложится так же. Запятая служит разделителем только у тегов — в текстовом поле Красный, Синий останется одним значением.

Если в фильтре видны сочетания вроде Красный||Синий, индекс собран версией до 1.8.1 — запустите «Переиндексацию» в шапке админки.

Типы ​

ТипЗначенияКак выводится
СтандартныйТекст: опция, TV, полеСписок значений
Числовой (диапазон)ЧислаПолзунок и поля «от» и «до»
Булев (да/нет)1 и 0Переключатели
Родители (категории)Разделы MODX, значение — idСписок
Категории товаров (MS3)Категории товаров, значение — idСписок
ДатаДаты целикомСписок
День месяца, Месяц, ГодЧасть датыСписок
ПроизводителиПроизводители MiniShop3, значение — idСписок
ЦветаОпция цветаПлашки с цветом

Типы «Категории товаров», «Производители» и «Цвета» требуют MiniShop3. Какой чанк отвечает за каждый вид блока — в Шаблонах.

Настройки, которых нет в таблице ​

Набор хранится в базе как JSON, и у фильтра есть настройки, которые таблица не показывает, но и не стирает при сохранении:

НастройкаЧто делает
fieldПоле или опция, если её имя отличается от ключа фильтра
enabledfalse — фильтр в наборе остаётся, но не выводится
sort, sort_dirПорядок значений: count (по умолчанию) или value, направление desc или asc
hide_zeroУбирает значения, по которым нет товаров
min_valuesТолько у типов «Родители» и «Категории товаров»: не выводить фильтр, если значений меньше указанного. По умолчанию 2
prefix, suffixТекст до и после значения на ползунке: от, ₽
label_yes, label_noПодписи переключателей булева фильтра

Привязка к страницам ​

В дереве справа отмечаются страницы каталога. Товары, неопубликованные и удалённые ресурсы в дереве не показываются.

Одна страница принадлежит одному набору. Страница, уже привязанная к другому набору, помечена в дереве меткой «занято» — если отметить её здесь, прежняя привязка снимется без предупреждения.

Наследование на дочерние страницы избавляет от привязки каждого раздела по отдельности: набор, привязанный к «Каталогу», действует и на его подразделах. Работает это так: для страницы без своей привязки mFilter поднимается вверх по дереву до первого привязанного родителя, у которого включено наследование. Родитель с выключенным наследованием поиск не прекращает — подъём идёт дальше, к его родителю.

Удаление ​

Удаление набора снимает его привязки к страницам и сбрасывает кэш значений этих страниц. Слаги, SEO-шаблоны и паттерны URL остаются: они привязаны к ключу фильтра, а не к набору.