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

Системные настройки

Все настройки имеют префикс mfilter. и находятся в пространстве имён mfilter.

Полный актуальный список — 22 настройки. Регистрируются автоматически при установке/обновлении пакета.

Пути

НастройкаПо умолчаниюОписание
mfilter.core_path{core_path}components/mfilter/Путь к ядру компонента
mfilter.assets_path{assets_path}components/mfilter/Путь к ассетам
mfilter.assets_url{assets_url}components/mfilter/URL ассетов

URL

НастройкаПо умолчаниюОписание
mfilter.url_separator--Разделитель ключа и значения в URL (brand--apple)
mfilter.values_separator-or-Разделитель множественных значений (red-or-blue)
mfilter.non_canonical_url_handling404Что делать с URL без trailing slash и другими не-canonical вариантами: 404, 301 (редирект на canonical), off (не вмешиваться)

Подсказка

До версии 1.3.2 url_separator по умолчанию был _. На обновляющихся установках значение сохраняется прежним — изменение не ломает существующие URL. Новые установки получают --.

Примеры URL

С настройками по умолчанию:

/catalog/brand--apple/color--red-or-blue/price--1000-5000/

С url_separator = _ (legacy) и values_separator = ,:

/catalog/brand_apple/color_red,blue/price_1000-5000/

Фильтрация

НастройкаПо умолчаниюОписание
mfilter.default_limit20Количество элементов на странице по умолчанию. Задаёт значение по умолчанию для параметра &limit сниппета mFilter; переданный &limit её перекрывает
mfilter.default_sortpagetitleПоле сортировки по умолчанию
mfilter.default_sortdirASCНаправление сортировки: ASC или DESC

SEO оптимизация

НастройкаПо умолчаниюОписание
mfilter.seo_noindex_filteredfalseДобавлять noindex для всех отфильтрованных страниц
mfilter.seo_max_filters2Максимум активных фильтров, при котором страница индексируется. Если активных фильтров больше — noindex
mfilter.seo_max_values1Максимум значений одного фильтра, при котором страница индексируется. 1 = страница color--red-or-blue (два значения) получает noindex

Логика noindex

seo_noindex_filtered = true     → noindex для любой фильтрации
seo_max_filters = 2             → noindex если активно больше 2 фильтров
seo_max_values = 1              → noindex для страниц с множественным выбором (color--red-or-blue)

Эти три настройки работают совместно — noindex ставится при срабатывании любой.

Кэширование

НастройкаПо умолчаниюОписание
mfilter.cache_enabledtrueВключить кэширование промежуточных результатов фильтрации
mfilter.cache_lifetime3600Время жизни кэша в секундах

Очистка кэша

Кэш автоматически очищается при:

  • Сохранении ресурса с настроенными фильтрами
  • Очистке кэша MODX
  • Изменении набора фильтров в админке

Ручная очистка: mFilter → Обслуживание → Очистить кэш.

Подсказка

С версии 1.4.0 главный механизм ускорения — индекс фасетов, а не кэш. Кэш закрывает повторные запросы к одной и той же выборке.

Словоформы

НастройкаПо умолчаниюОписание
mfilter.morpher_api_key``API-ключ сервиса Morpher для автогенерации словоформ

Morpher API

Для автоматического склонения слов используется Morpher API:

  1. Зарегистрируйтесь на сайте
  2. Получите API-ключ
  3. Укажите его в настройке mfilter.morpher_api_key

Бесплатный лимит — 1000 запросов в день. Без ключа склонения генерируются по упрощённым правилам (русский язык).

Слаги

НастройкаПо умолчаниюОписание
mfilter.slugs_auto_generatetrueАвтоматически генерировать слаги для новых значений фильтров
mfilter.slug_parent_prefixon_conflictКак разрешать совпадение слагов у разных значений: on_conflict, always, never (см. ниже)

Примеры слагов

ЗначениеСлаг
Красныйkrasnyj
Apple iPhoneapple-iphone

Транслитерация кириллицы и нормализация выполняются всегда — отдельной настройки нет. Если нужны кастомные слаги — отредактируйте их вручную в mFilter → Слаги.

Конфликты слагов

Два разных значения могут дать одинаковый слаг — например категории «Axis» в разделе «Печи» и «Axis» в разделе «Топки» обе транслитерируются в axis. Слаг обязан быть уникальным в пределах ключа фильтра, поэтому конфликт нужно как-то разрешить. За стратегию отвечает mfilter.slug_parent_prefix:

ЗначениеПоведениеКогда выбирать
on_conflictОбычный слаг (axis); если он занят — добавляется родитель (topki-axis)По умолчанию. Существующие URL не меняются, конфликты решаются осмысленно
alwaysРодитель добавляется всегда: pechi-axis, topki-axisКогда нужна симметрия и предсказуемость URL
neverРодитель не используется, при конфликте — числовой суффикс (axis-2)Когда важна краткость URL

Смена режима меняет URL

Режим always добавляет префикс родителя ко всем слагам категорий, а не только к конфликтующим, из-за чего изменятся уже проиндексированные адреса. Настраивайте до запуска каталога, либо предусмотрите 301-редиректы со старых URL.

При обновлении с версий до 1.4.7

Фильтры «Категории товаров (MS3)» и «Производители» раньше выводили в URL числовой ID (/catalog/vendor--17/), потому что слаг для них не запрашивался. Теперь адреса строятся по слагу (/catalog/vendor--ariston/) — это происходит само, без изменения настроек. Старые ссылки продолжают работать (разбор принимает числовой сегмент), но проиндексированные адреса сменятся. Для каталога в поиске настройте 301-редиректы.

В примерах использован разделитель --; на установках, обновлённых с версий до 1.3.2, действует прежний _ — см. mfilter.url_separator.

Префикс родителя доступен только там, где значение фильтра — это ID ресурса: типы «Родители (категории)» и «Категории товаров (MS3)». Имя берётся из menutitle (или pagetitle) родительской категории.

Для остальных типов при конфликте всегда используется числовой суффикс. Это касается производителей (их ID указывает на запись MiniShop3, а не на ресурс — совпадение с номером постороннего ресурса дало бы префикс чужого раздела), опций MiniShop3 и TV.

TV-индекс

НастройкаПо умолчаниюОписание
mfilter.tv_index_on_savetrueАвтообновление TV-индекса (mfl_tv_index) при сохранении ресурса с TV

Подсказка

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

Отладка

НастройкаПо умолчаниюОписание
mfilter.debug_profilerfalseВключить профайлер для отладки производительности

При включении профайлера в ответ AJAX добавляется секция profiler:

json
{
  "success": true,
  "data": { ... },
  "profiler": {
    "total_time": 0.045,
    "queries": 12,
    "memory": "2.5 MB"
  }
}

Фронтенд

НастройкаПо умолчаниюОписание
mfilter.register_frontendtrueАвтоматически подключать CSS/JS на фронтенде
mfilter.auto_submittrueАвтоматическая отправка формы при изменении фильтров
mfilter.auto_submit_delay300Задержка автоотправки (мс)
mfilter.frontend_assets(см. ниже)JSON-массив CSS/JS файлов для подключения

Список фронтенд-ассетов

mfilter.frontend_assets — JSON-массив путей с плейсхолдерами [[+cssUrl]] и [[+jsUrl]]. По умолчанию:

json
[
    "[[+cssUrl]]web/vendor/nouislider/nouislider.min.css",
    "[[+cssUrl]]web/mfilter.css",
    "[[+jsUrl]]web/vendor/nouislider/nouislider.min.js",
    "[[+jsUrl]]web/core/ApiClient.js",
    "[[+jsUrl]]web/core/FilterAPI.js",
    "[[+jsUrl]]web/modules/hooks.js",
    "[[+jsUrl]]web/mfilter.headless.js",
    "[[+jsUrl]]web/ui/FilterUI.js",
    "[[+jsUrl]]web/ui/SelectedFilters.js",
    "[[+jsUrl]]web/mfilter.slider.js",
    "[[+jsUrl]]web/mfilter.js"
]

При обновлении пакета список обновляется автоматически, только если в нём нет сторонних файлов. Если вы добавляли свои файлы — резолвер их обнаружит и оставит ваш список без изменений (с предупреждением в лог MODX). В этом случае обновляйте frontend_assets вручную или подключайте кастомные скрипты в шаблоне/плагине.

Отключение автоподключения

Установите mfilter.register_frontend = false и подключите файлы в шаблоне ресурса — все из списка выше, в том же порядке. Готовая разметка — в разделе JavaScript → Подключение.

Пример конфигурации

Минимальная SEO-конфигурация

mfilter.seo_max_filters = 2
mfilter.seo_max_values = 1
mfilter.non_canonical_url_handling = 404

Высоконагруженный сайт

mfilter.cache_enabled = true
mfilter.cache_lifetime = 7200
mfilter.default_limit = 24

Главное условие производительности — собранный индекс фасетов, не настройки кэша.

Без автоподключения JS (свой стек)

mfilter.register_frontend = false
mfilter.auto_submit = true
mfilter.auto_submit_delay = 500

Что изменилось в системных настройках

С версии 1.4.0

  • (нет новых настроек — индекс фасетов работает прозрачно)

С версии 1.3.2

  • Добавлено: mfilter.non_canonical_url_handling
  • Изменён дефолт mfilter.url_separator: _-- (только для новых установок)

С версии 1.1.0

  • Префикс настроек переименован: mfl_*mfilter.*