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

Паттерны URL

Паттерны определяют правила распознавания фильтров в SEO URL.

Назначение

Паттерны позволяют:

  • Создавать красивые URL без ключей фильтров
  • Распознавать сложные форматы (диапазоны цен, даты)
  • Настраивать приоритет правил парсинга

Примеры URL

ТипURLПаттерн
Стандартный/catalog/vendor_apple/{key}_{value}
Без ключа/catalog/apple/Кастомный паттерн
Диапазон/catalog/price_1000-5000/price_(\d+)-(\d+)
Множественный/catalog/color_red,blue/{key}_{value}(,{value})*

Таблица паттернов

СтолбецОписание
ПаттернРегулярное выражение
Ключ фильтраК какому фильтру относится
ОписаниеПояснение
АктивенВключён/выключен
ПорядокПриоритет применения

Создание паттерна

1. Базовые поля

ПолеОписание
ПаттернРегулярное выражение для URL-сегмента
Ключ фильтраКлюч из набора фильтров
ОписаниеДля чего паттерн
АктивенИспользовать ли

2. Синтаксис паттернов

Используется синтаксис регулярных выражений PHP (PCRE).

Захват значений

regex
# Одно значение
vendor_([a-z0-9-]+)

# Диапазон
price_(\d+)-(\d+)

# Множественные значения
color_([a-z0-9-]+(?:,[a-z0-9-]+)*)

Группы захвата

  • Группа 1 — первое значение (или min для диапазона)
  • Группа 2 — второе значение (или max для диапазона)

Встроенные паттерны

Стандартный формат

regex
{key}_([a-z0-9-]+)

Распознаёт: vendor_apple, color_krasnyj

Числовой диапазон

regex
{key}_(\d+)-(\d+)

Распознаёт: price_1000-5000, weight_100-500

Множественный выбор

regex
{key}_([a-z0-9-]+(?:,[a-z0-9-]+)*)

Распознаёт: color_red,blue,green

Приоритет

Паттерны применяются в порядке поля Порядок (rank):

  1. Сначала паттерны с меньшим номером
  2. Первый совпавший паттерн используется
  3. Остальные игнорируются для этого сегмента

Примеры

Паттерн для цены

Паттерн: price_(\d+)-(\d+)
Ключ: price
Описание: Диапазон цен

URL /catalog/price_10000-50000/price: {min: 10000, max: 50000}

Паттерн для даты

Паттерн: date_(\d{4})-(\d{2})-(\d{2})_to_(\d{4})-(\d{2})-(\d{2})
Ключ: date
Описание: Диапазон дат

URL /catalog/date_2024-01-01_to_2024-12-31/ → диапазон дат

Паттерн без ключа (только значение)

Паттерн: ^(apple|samsung|xiaomi)$
Ключ: vendor
Описание: Производители напрямую

URL /catalog/apple/vendor: apple

Программный доступ

php
$mfilter = $modx->services->get('mfilter');
$urlRouter = $mfilter->getUrlRouter();

// Распарсить URL
$parsed = $urlRouter->parse('/catalog/vendor_apple/price_1000-5000/');
// [
//     'filters' => ['vendor' => ['apple'], 'price' => ['min' => 1000, 'max' => 5000]],
//     'tech' => ['sort' => 'price', 'page' => 1]
// ]

Отладка

Включите mfilter.debug для логирования:

  • Какие паттерны проверяются
  • Какой паттерн сработал
  • Результат парсинга

Советы

  1. Тестируйте паттерны — неправильное регулярное выражение может сломать роутинг
  2. Используйте приоритет — специфичные паттерны должны иметь меньший номер
  3. Не усложняйте — стандартный формат key_value работает для большинства случаев