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

mFilter ​

Фасетная фильтрация товаров и ресурсов для MODX Revolution 3.x с поддержкой SEO-адресов.

Возможности ​

  • Фасетная фильтрация — по любым полям ресурсов, TV, опциям MiniShop3
  • Индекс фасетов — индекс значений фильтров, ускоряет фильтрацию на больших каталогах. Сам обновляется после правок в админке и импорта MiniShop3; правки из кода подхватывает задача Scheduler раз в 5 минут (подробнее)
  • SEO-адреса — человекочитаемые адреса вида /catalog/brand--apple/color--black/
  • Счётчики значений — подсчёт доступных значений с учётом выбранных фильтров
  • AJAX — обновление результатов без перезагрузки страницы
  • Headless API — выдача, адреса и SEO-данные для своего фронтенда; форму фильтров пока выводит mFilterForm (подробнее)
  • SEO-оптимизация — title, description, H1, canonical и noindex через плейсхолдеры
  • Словоформы — падежи значений фильтров и полей страницы в SEO-текстах
  • Сниппеты — блок «Выбрано», хлебные крошки, ссылки на подборки, карта сайта (список)
  • Интеграция — MiniShop3, mSearch, pdoTools
  • Интерфейс админки — Vue 3 и PrimeVue

Системные требования ​

ТребованиеВерсия
MODX Revolution3
PHP8.1+, с MiniShop3 — 8.2+
MySQL5.7+ / MariaDB 10.3+

Проверьте PHP до установки

На PHP ниже 8.1 после установки mFilter перестанет открываться весь сайт — и витрина, и админка. Установщик версию PHP не проверяет.

Зависимости ​

ПакетОбязателенЗачем
pdoTools 3.0.2 и новееДаСниппеты и шаблонизатор Fenom
VueToolsДаИнтерфейс админки
MiniShop3НетФильтрация товаров
SchedulerНет. Ставьте до mFilterФоновые задачи: синхронизация индекса фасетов, прогрев, карта сайта

pdoTools и VueTools установщик скачает и поставит сам. Если не получилось — поставьте их вручную до открытия админки.

Установка ​

Пакет распространяется через modstore.pro и при установке проверяет лицензию. Серверу нужен доступ к modstore.pro.

  1. Перейдите в Пакеты → Установщик.
  2. В меню у кнопки Загрузить пакеты выберите поставщика modstore.pro — откроется его каталог. Ключ API поставщика — в личном кабинете modstore.pro. Сама кнопка открывает каталог поставщика по умолчанию, modx.com, — mFilter там нет.
  3. Найдите mFilter и нажмите Загрузить, затем Установить.

Менеджерам без флага sudo нужны права — см. Интерфейс админки.

Быстрый старт ​

1. Создайте набор фильтров ​

В админке Пакеты → mFilter → Наборы фильтров:

  1. Создайте набор.
  2. Добавьте фильтры: опции MiniShop3, TV, поля ресурсов.
  3. Привяжите набор к категориям каталога.

2. Добавьте сниппеты на страницу ​

mFilter вызывается первым и выводится через переменную — иначе числа в форме не сойдутся с выдачей:

fenom
{set $catalog = '!mFilter' | snippet : [
    'element' => 'msProducts',
    'parents' => $_modx->resource.id,
    'limit' => 24
]}

{* Форма фильтров *}
{'!mFilterForm' | snippet}

{* Результаты с пагинацией *}
{$catalog}

Пошаговая настройка с шаблоном каталога — в Быстром старте.

3. SEO-адреса (опционально) ​

SEO-адреса включены по умолчанию и выглядят так:

/catalog/brand--apple/color--black-or-white/price--1000--5000/

Чтобы поменять запись значения в адресе, исправьте алиас на вкладке Алиасы.

Режимы работы ​

Сниппеты ​

Сниппеты выводят HTML на сервере, фильтрацию без перезагрузки выполняет скрипт mFilter. Пример вызова — в Быстром старте.

Преимущества:

  • Работает «из коробки»
  • Страница с фильтрами индексируется поисковиками
  • Первая загрузка не требует JavaScript

Headless API ​

Для своего фронтенда: выдача, адреса и SEO-данные приходят через API. Значений фильтров для формы в API пока нет — форму выводит mFilterForm.

javascript
document.addEventListener('mfilter:ready', async () => {
    const response = await mfilter.api.apply({
        resource_id: 5,
        filters: { 'price|min': ['1000'], 'price|max': ['5000'] },
        sort: 'price-asc',
    });

    response.items;   // товары
    response.urls;    // SEO-адреса
});

Подробнее: Headless API

Архитектура ​

┌─────────────────────────────────────────────────────────┐
│                      Фронтенд                           │
├─────────────────┬───────────────────────────────────────┤
│  Сниппеты       │           Свой фронтенд               │
│  (mFilterForm)  │          (Headless API)               │
├─────────────────┴───────────────────────────────────────┤
│                    JavaScript API                        │
│         FilterUI / ApiClient / FilterAPI / Hooks         │
├─────────────────────────────────────────────────────────┤
│                      REST API                            │
│    /api/v1/filter/schema | apply | suggestions | ...     │
├─────────────────────────────────────────────────────────┤
│                       Сервисы                            │
│  Filter | FilterSet | SlugManager | UrlRouter | SEO...   │
├─────────────────────────────────────────────────────────┤
│                     База данных                          │
│  FilterSets | FacetIndex | Slugs | Patterns | SEO | ...  │
└─────────────────────────────────────────────────────────┘

Все таблицы — в Моделях и базе данных.

Отличия от mFilter2 ​

mFilter — это полностью переписанный компонент для MODX 3.x:

АспектmFilter2mFilter
MODX2.x3.x
PHP5.6+8.1+
ИнтерфейсExtJSVue 3 + PrimeVue
АрхитектураПроцедурныйService-based
SEO URLОтдельный плагинВстроено
Headless APIНетREST API v1
Типы фильтровФиксированныеРасширяемые
КонфигурацияВ сниппетеНаборы фильтров в админке
КэшированиеБазовоеМногоуровневое