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

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

Все настройки имеют префикс mfilter. и находятся в пространстве имён mfilter. При обновлении пакета добавляются новые настройки, а значения существующих не меняются — кроме mfilter.frontend_assets, см. Список подключаемых файлов.

Пути ​

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

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

URL ​

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

Подсказка

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

Меняйте разделители до запуска каталога

После смены url_separator или values_separator адреса прежнего вида перестают открываться — в том числе проиндексированные поисковиками.

Примеры URL ​

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

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

С прежним url_separator = _ и values_separator = ,:

/catalog/brand_apple/color_red,blue/price_1000_5000/

Фильтрация ​

НастройкаПо умолчаниюОписание
mfilter.default_limit20Количество элементов на странице, если сниппету mFilter не передан &limit
mfilter.default_sortpagetitleСейчас не действует — см. ниже
mfilter.default_sortdirASCСейчас не действует — см. ниже

Сортировку каталога задают параметры &sortby и &sortdir сниппета mFilter, а не эти две настройки.

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

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

mFilter не пишет тег в страницу сам: он ставит плейсхолдер mfilter.seo.noindex. Выведите по нему <meta name="robots"> в шаблоне ресурса — см. Плейсхолдеры. После фильтрации без перезагрузки тег ставит скрипт.

Когда ставится noindex ​

  • Достаточно, чтобы сработала любая из трёх настроек.
  • 0 в seo_max_filters и seo_max_values — без ограничения.
  • Диапазон — обе его границы — считается одним фильтром.
  • Индивидуальная SEO-запись снимает noindex от seo_max_filters и seo_max_values, но не от seo_noindex_filtered.

Кэширование ​

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

Очистка кэша ​

Вручную — mFilter → Обслуживание → Очистить кэш. Очистка кэша MODX таблицу mfl_cache не трогает. Когда кэш очищается сам — в разделе Автоматическая инвалидация.

Подсказка

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

Словоформы ​

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

Ключ выдают на сайте Morpher API после регистрации, там же — лимиты бесплатного доступа. Без ключа запросы тоже уходят к Morpher API. Если сервис не ответил, во все падежи записывается само слово — см. Словоформы.

Слаги ​

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

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

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

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

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

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

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

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

Слаг должен быть уникальным в пределах ключа фильтра. Если два значения дают одинаковый слаг — например, категории «Classic» в разделах «Кресла» и «Диваны» обе дают classic, — их разводит mfilter.slug_parent_prefix:

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

Если в on_conflict занят и вариант с родителем, добавляется числовой суффикс. Неизвестное значение настройки работает как on_conflict.

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

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

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

Режим действует на слаги, созданные после переключения: существующие не меняются. Чтобы перевести и старые категории, удалите их слаги на вкладке Алиасы — адреса этих категорий сменятся, предусмотрите 301-редиректы. Настраивайте режим до запуска каталога.

TV-индекс ​

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

Подсказка

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

Отладка ​

НастройкаПо умолчаниюОписание
mfilter.debug_profilerfalseЗамеры времени: панель под формой фильтров, замеры первой загрузки и после AJAX

Не оставляйте на рабочем сайте

Панель замеров под формой mFilterForm видят все посетители, а не только менеджеры.

Замеры первой загрузки сниппет mFilter выводит в код страницы, в window.__mfilterProfiler; скрипт формы показывает их в панели и удаляет переменную — ищите их в исходном коде страницы, а не в консоли. После фильтрации без перезагрузки замеры приходят в ключе _profiler ответа. Для этого на странице должна быть форма mFilterForm: при включённой настройке она добавляет к запросам debug=1.

json
{
  "success": true,
  "_profiler": {
    "total_ms": 45.2,
    "operations": {
      "getFilters": { "total_ms": 12.1, "count": 1, "avg_ms": 12.1, "min_ms": 12.1, "max_ms": 12.1 }
    }
  }
}

Фронтенд ​

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

Список подключаемых файлов ​

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

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"
]

Свои скрипты подключайте в шаблоне ресурса или плагине, а не в этом списке: при обновлении пакета он заменяется стандартным. Свой файл, записанный через [[+jsUrl]] или положенный в каталог mFilter, пропадёт, а убранные из списка файлы mFilter вернутся.

Список остаётся как есть, только если в нём есть сторонний файл — вне каталога mFilter и без плейсхолдеров [[+…]]. Тогда окно установки покажет предупреждение. Пустой список тоже не трогается.

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

Установите 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.9.1 ​

  • mfilter.default_limit начала действовать: свойство limit сниппета mFilter теперь по умолчанию пустое. Если в свойство было вписано своё число, после обновления оно пропало — задайте его в настройке или в &limit

С версии 1.5.0 ​

  • Добавлено: mfilter.slug_parent_prefix
  • Диапазон считается одним фильтром для mfilter.seo_max_filters

С версии 1.4.3 ​

  • Пустой список mfilter.frontend_assets при обновлении больше не заполняется

С версии 1.3.2 ​

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

С версии 1.1.0 ​

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