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

Паттерны URL

Паттерн меняет вид фильтра в SEO-адресе: переименовывает ключ, убирает его или ставит фильтр раньше других. Без паттерна фильтр записывается ключом и значением — /catalog/made_in--germaniya/. Разделители задают настройки mfilter.url_separator и mfilter.values_separator.

Паттерны создаются на вкладке «Паттерны» и действуют на всех страницах каталога с фильтрами.

Поля

ПолеЧто задаёт
Ключ фильтраКлюч из набора фильтров: made_in, color. На один ключ — один паттерн
URL паттернВид сегмента: {key} — ключ фильтра, {value} — значение, {min} и {max} — границы диапазона. {values} работает так же, как {value}
Тип парсингаКак читать значение из адреса: «По умолчанию» — список значений, «Булево» — да или нет, «Диапазон» — две границы. Шаблон с {min} и {max} читается как диапазон при любом значении этого поля
ПриоритетОт 0 до 100, меньше — раньше: порядок фильтров в адресе и порядок проверки при открытии ссылки
Скрыть ключ в URLВ адресе только значение: /catalog/seryj/
АктивенВыключенный паттерн не действует — фильтр пишется ключом и значением

«URL паттерн» — не регулярное выражение: всё, кроме подстановок, попадает в адрес как есть. Значение в адресе — слаг с вкладки Слаги: «Германия» → germaniya. Несколько значений соединяются через -or-.

Переименовать ключ

Ключ made_in, URL паттерн sdelano_v--{value}:

/catalog/sdelano_v--germaniya/
/catalog/sdelano_v--germaniya-or-kitaj/

Адреса прежнего вида — /catalog/made_in--germaniya/ — тоже открываются. А если потом поменять сам шаблон, ссылки с sdelano_v-- будут отдавать 404.

Скрыть ключ

Ключ color, флажок «Скрыть ключ в URL», URL паттерн {value}:

/catalog/seryj/
/catalog/seryj-or-sinij/

С флажком поле «URL паттерн» не учитывается. Без флажка шаблон {value} не ставьте: он подходит к любому сегменту и забирает адреса других фильтров — они отдают 404.

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

Год, месяц и день слага не получают — они и так годятся для адреса. Такой сегмент узнаётся по виду значения, и вид называет сам тип фильтра:

ТипЧто принимаетсяПример адреса
ГодЧетыре цифры/catalog/2026/
МесяцГГГГ-ММ/catalog/2026-03/
День месяцаОт 1 до 31, без ведущего нуля/catalog/18/

Всё, что под этот вид не подходит, остаётся ошибкой 404: /catalog/9999999/, /catalog/2026-13/, /catalog/05/. Проверяется каждое значение сегмента, поэтому /catalog/2026-or-9999999/ тоже ошибка, а не второй адрес той же страницы.

Не для любого фильтра

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

Если адрес совпадает и с существующей страницей сайта, и с фильтром, открывается страница. Так что дочерняя страница каталога с адресом /catalog/2026/ останется собой, а фильтр по такому адресу просто не сработает.

Диапазоны

Границы подставляются по {min} и {max}. Ключ price, URL паттерн ot-{min}-do-{max}:

/catalog/ot-1000-do-5000/

Обе подстановки нужны сразу. Если в шаблоне нет хотя бы одной, к диапазону он не применяется и адрес остаётся вида /catalog/price--1000--5000/. Так же ведут себя шаблоны, написанные до появления {min} и {max}, — адреса на работающих сайтах от обновления не меняются.

Адреса формата ключ--от--до продолжают открываться и после того, как паттерн задан. Дробные границы в адрес попадают как есть: /catalog/ot-999.5-do-5000/.

Для диапазона флажок «Скрыть ключ в URL» не действует.

Булевы фильтры

Ключ spb, URL паттерн v-spb-{value}, тип парсинга «Булево»:

/catalog/v-spb-1/

Адрес строится из значения фильтра, поэтому в нём 1 или 0. При разборе принимаются оба написания: 1 и yes — включено, 0 и no — выключено. Значение, которое не читается ни так, ни так, разбирается другими паттернами.

Порядок фильтров в адресе

Сначала идут фильтры с паттернами по возрастанию приоритета, затем фильтры без паттерна. made_in с приоритетом 0, spb с шаблоном v-spb-{value} и приоритетом 5, у vendor_id паттерна нет:

/catalog/sdelano_v--germaniya/v-spb-1/vendor_id--acer/

Проверить адрес

Как mFilter разберёт адрес, покажет mfilter.api.parseUrl() в консоли браузера на странице каталога:

js
const parsed = await mfilter.api.parseUrl({ url: '/catalog/seryj/', resource_id: 5 });
parsed.filters;       // { color: ['Серый'], … }
parsed.unrecognized;  // сегменты, которые не удалось разобрать

Подробнее — Headless API.