
Наборы фильтров
Набор фильтров задаёт, какие фильтры показывать и на каких страницах. Наборы создаются на вкладке «Наборы фильтров» — с них начинается настройка 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 | Поле или опция, если её имя отличается от ключа фильтра |
enabled | false — фильтр в наборе остаётся, но не выводится |
sort, sort_dir | Порядок значений: count (по умолчанию; у производителей — по названию), value или label — по подписи; направление desc или asc. Подробнее — Сортировка значений фильтра |
hide_zero | Убирает значения, по которым при выбранных фильтрах не осталось товаров. По умолчанию включена у булева фильтра и производителей, у остальных выключена; на диапазон и разделы не действует |
multiple | false — одиночный выбор: переключатели вместо флажков |
color_map | Свои цвета для значений типа «Цвета» |
min_values | Только у типов «Родители» и «Категории товаров»: не выводить фильтр, если значений меньше указанного. По умолчанию 2 |
prefix, suffix | Текст до и после значения на ползунке: от, ₽. Стандартный чанк их не выводит — нужен свой tplSlider, см. mFilterForm |
label_yes, label_no | Подписи переключателей булева фильтра |
Привязка к страницам
В дереве справа отмечаются страницы каталога. Товаров, неопубликованных и удалённых ресурсов в дереве нет. Нет и страницы с флагом «Скрыть потомков в дереве» — вместе со всем, что под ней.
Одна страница принадлежит одному набору. Страница, уже привязанная к другому набору, помечена в дереве меткой «занято» — если отметить её здесь, прежняя привязка снимется без предупреждения. «Выделить всё» и кнопки у раздела — «Выделить все дочерние» и «Снять выделение с дочерних», они появляются при наведении — забирают и страницы с меткой «занято».
Наследование
Наследование на дочерние страницы избавляет от привязки каждого раздела по отдельности: набор, привязанный к «Каталогу», действует и на его подразделах.
Раздел достаточно отметить, не раскрывая его. Отметка раздела отмечает и его уже раскрытые подразделы, и каждый становится отдельной привязкой.
Для страницы без своей привязки mFilter поднимается по дереву до первого привязанного родителя, у которого включено наследование. Родитель с выключенным наследованием поиск не прекращает — подъём идёт дальше, к его родителю.
Два неочевидных случая:
- страница, привязанная к выключенному набору, остаётся без фильтров, а её подразделы получают набор уровнем выше;
- неопубликованный раздел обрывает наследование: его опубликованные подразделы набор сверху не получают. Опубликуйте раздел и нажмите «Пересобрать кэш» или привяжите подразделы напрямую.
Удаление
Удаление набора снимает его привязки к страницам и сбрасывает кэш значений этих страниц. Алиасы, SEO-шаблоны и паттерны URL остаются: они привязаны к ключу фильтра, а не к набору.
