
mFilter
Фасетная фильтрация для MODX 3 с поддержкой SEO URL


Фасетная фильтрация товаров и ресурсов для MODX Revolution 3.x с поддержкой SEO-friendly URL.
/catalog/brand_apple/color_black/| Требование | Версия |
|---|---|
| MODX Revolution | 3.0.0+ |
| PHP | 8.1+ |
| MySQL | 5.7+ / MariaDB 10.3+ |
После установки:
В админке Extras → mFilter → Наборы фильтров:
{* Форма фильтров *}
{'!mFilterForm' | snippet}
{* Результаты с пагинацией *}
{'!mFilter' | snippet : [
'element' => 'msProducts',
'paginator' => 'pdoPage',
'parents' => $_modx->resource.id,
'limit' => 24,
'tpl' => 'mfilter.row'
]}
{* Пагинация *}
{$_modx->getPlaceholder('page.nav')}SEO URL включены по умолчанию. Фильтры создают URL вида:
/catalog/brand_apple/color_black-or-white/price_1000-5000/Для кастомизации перейдите в Наборы фильтров и настройте слаги для значений фильтров.
┌─────────────────────────────────────────────────────────┐
│ Фронтенд │
├─────────────────┬───────────────────────────────────────┤
│ SSR режим │ Headless режим │
│ (mFilterForm) │ (Vue/React/Svelte) │
├─────────────────┴───────────────────────────────────────┤
│ JavaScript API │
│ FilterUI / ApiClient / FilterAPI / Hooks │
├─────────────────────────────────────────────────────────┤
│ REST API │
│ /api/v1/filter/schema | apply | suggestions | ... │
├─────────────────────────────────────────────────────────┤
│ Сервисы │
│ Filter | FilterSet | SlugManager | UrlRouter | SEO... │
├─────────────────────────────────────────────────────────┤
│ База данных │
│ FilterSets | Slugs | Patterns | WordForms | Cache │
└─────────────────────────────────────────────────────────┘mFilter — это полностью переписанный компонент для MODX 3.x:
| Аспект | mFilter2 | mFilter |
|---|---|---|
| MODX | 2.x | 3.x |
| PHP | 5.6+ | 8.1+ |
| Интерфейс | ExtJS | Vue 3 + PrimeVue |
| Архитектура | Процедурный | Service-based |
| SEO URL | Отдельный плагин | Встроено |
| Headless API | Нет | REST API v1 |
| Типы фильтров | Фиксированные | Расширяемые |
| Конфигурация | В сниппете | Наборы фильтров в админке |
| Кэширование | Базовое | Многоуровневое |
Традиционный режим — HTML генерируется на сервере:
{'!mFilterForm' | snippet}
{'!mFilter' | snippet : ['element' => 'msProducts']}Преимущества:
API-режим для современных фреймворков:
// Получить схему фильтров
const schema = await mfilter.getSchema(resourceId);
// Применить фильтры
const result = await mfilter.apply(
{ brand: ['apple'], price: { min: 1000, max: 5000 } },
{ sort: 'price-asc', page: 1 }
);Подробнее: Headless API