
Паттерны 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):
- Сначала паттерны с меньшим номером
- Первый совпавший паттерн используется
- Остальные игнорируются для этого сегмента
Примеры
Паттерн для цены
Паттерн: 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 для логирования:
- Какие паттерны проверяются
- Какой паттерн сработал
- Результат парсинга
Советы
- Тестируйте паттерны — неправильное регулярное выражение может сломать роутинг
- Используйте приоритет — специфичные паттерны должны иметь меньший номер
- Не усложняйте — стандартный формат
key_valueработает для большинства случаев
