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

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

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

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

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

Название набора обязательно: без него «Сохранить» ничего не делает.

Кнопка «Пересобрать кэш» ​

После того как в каталоге создали, опубликовали или перенесли раздел, нажмите «Пересобрать кэш» — иначе раздел останется без фильтров. Кнопка заново строит карту «страница → набор», а правки дерева карту не обновляют, даже из админки. Очистка кэша MODX не помогает.

Карту обновляют только сохранение и удаление набора, эта кнопка и кнопки «Очистить кэш» и «Переиндексация».

«Пересобрать кэш» заодно стирает кэш значений и прогретые списки товаров всего сайта — первые заходы после неё медленнее.

Фильтры ​

Порядок строк в таблице фильтров — порядок блоков в форме, строки перетаскиваются.

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

Две строки не могут занять один ключ: сохранение отклоняется и показывает номера строк.

Сохранение набора пересобирает индекс фасетов для новых и изменённых ключей, поэтому на крупном каталоге идёт дольше, см. Обслуживание.

Смена ключа ​

Вместе с ключом меняются адреса, а алиасы, паттерны и SEO-шаблоны старого ключа перестают действовать.

Ключ меняют:

  • правка колонки «Ключ». Колонка показывает поле фильтра, а ключ, если он отличается от поля, — подсказкой под полем. Например, у фильтра {"brand": {"field": "product_brand"}} в колонке стоит product_brand, под ним — «Ключ фильтра: brand»;
  • у дат — смена типа между «Дата», «День месяца», «Месяц», «Год»: ключ у них составной, publishedon_month.

Источники ​

ИсточникОткуда значения
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 получит подпись «Красный», без == подпись совпадает со значением.

Форма выводит значение, а не подпись

Сейчас в форме фильтров стоит само значение: red, а не «Красный». Если покупатель должен видеть «Красный», храните в TV это слово как значение, без ==.

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

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

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

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

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

Подписи попадают в базу при индексации TV. Её запускают эти две кнопки и сохранение товара — только для этого товара. Сохранение набора индекс TV не трогает.

TV со списком ресурсов ​

У 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. Часть настроек фильтра таблица не показывает, но и не стирает при сохранении. Полей для них в админке нет: задайте их в JSON набора — колонка filters таблицы mfl_filter_sets:

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

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

В дереве справа отмечаются страницы каталога. Товаров, неопубликованных и удалённых ресурсов в дереве нет. Нет и страницы с флагом «Скрыть потомков в дереве» — вместе со всем, что под ней.

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

Наследование ​

Наследование на дочерние страницы избавляет от привязки каждого раздела по отдельности: набор, привязанный к «Каталогу», действует и на его подразделах.

Раздел достаточно отметить, не раскрывая его. Отметка раздела отмечает и его уже раскрытые подразделы, и каждый становится отдельной привязкой.

Для страницы без своей привязки mFilter поднимается по дереву до первого привязанного родителя, у которого включено наследование. Родитель с выключенным наследованием поиск не прекращает — подъём идёт дальше, к его родителю.

Два неочевидных случая:

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

Удаление ​

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