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

Фронтенд

Документация по шаблонам и вёрстке фронтенда mFilter.

Структура

РазделОписание
ШаблоныЧанки и разметка
ПлейсхолдерыПеременные для шаблонов
ПагинацияРежимы, шаблоны, кнопка "Показать ещё"

Обзор

mFilter использует Fenom для шаблонизации. Основные компоненты фронтенда:

Форма фильтров

html
<form id="mfilter-form" data-mfilter-form>
    <!-- Фильтры -->
</form>

Результаты

html
<div id="mfilter-results" data-mfilter-results>
    <!-- Товары/ресурсы -->
</div>

Пагинация

html
<div id="mfilter-pagination" data-mfilter-pagination>
    <!-- Постраничная навигация -->
</div>

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

Базовая разметка

html
<!-- Сниппет формы -->
[[!mFilterForm]]

<!-- Сниппет результатов -->
[[!mFilter?
    &element=`msProducts`
    &paginator=`pdoPage`
    &parents=`5`
]]

Кастомная разметка

html
<div class="catalog">
    <aside class="catalog__sidebar">
        [[!mFilterForm?
            &tplOuter=`@FILE chunks/mfilter/form.outer.tpl`
            &tplFilter.default=`@FILE chunks/mfilter/filter.default.tpl`
        ]]
    </aside>

    <main class="catalog__content">
        <div data-mfilter-results>
            [[!mFilter?
                &element=`msProducts`
                &paginator=`pdoPage`
                &tpl=`@FILE chunks/product.card.tpl`
            ]]
        </div>

        <div data-mfilter-pagination>
            [[!+page.nav]]
        </div>
    </main>
</div>

Data-атрибуты

Обязательные

АтрибутЭлементОписание
data-mfilter-formformКонтейнер формы
data-mfilter-resultsdivКонтейнер результатов

Опциональные

АтрибутЭлементОписание
data-mfilter-paginationdivКонтейнер пагинации
data-mfilter-pagination-modeformРежим пагинации: links (по умолчанию), loadmore, infinite
data-mfilter-totalspanКоличество результатов
data-mfilter-filterfieldsetБлок фильтра
data-mfilter-keyinputКлюч фильтра

CSS-классы

Состояния

КлассОписание
mfilter-loadingЗагрузка данных
mfilter-emptyНет результатов
mfilter-activeЕсть активные фильтры

Элементы формы

КлассОписание
mfilter-filterБлок фильтра
mfilter-filter--disabledНедоступный фильтр
mfilter-valueЗначение фильтра
mfilter-value--selectedВыбранное значение
mfilter-value--disabledНедоступное значение
mfilter-item-emptyЗначение с count=0
mfilter-countСчётчик товаров

Suggestions (подсказки)

После применения фильтра сервер возвращает suggestions — количество товаров для каждого значения фильтра. На основе этих данных JS обновляет UI:

Checkbox/radio

  • Элемент .mfilter-count обновляется числом
  • Контейнер .mfilter-item получает класс mfilter-item-empty при count=0

Select

  • <option> с count=0 получают атрибут disabled (серые, нельзя выбрать)
  • <option> с count>0 — disabled снимается
  • Пустой <option value=""> (placeholder) не блокируется

Range (числовые)

  • Обновляются доступные min/max через data-available-min, data-available-max
  • Слайдер (если есть) обновляет диапазон

JS API

Глобальный объект

javascript
// Получить экземпляр фильтра
const instance = window.MFilterUI.get('mfilter-form');

// Состояние
instance.state.filters   // активные фильтры
instance.state.page      // текущая страница
instance.state.pageCount // всего страниц
instance.state.total     // всего результатов
instance.state.sort      // текущая сортировка
instance.state.limit     // лимит на странице

События

javascript
document.addEventListener('mfilter:ui:ready', function(e) {
    const instance = e.detail.instances.values().next().value;

    instance.on('success', function(data) {
        console.log('Фильтр применён', data.response);
    });

    instance.on('change', function(data) {
        console.log('Поле изменено', data.field);
    });
});
СобытиеОписание
initЭкземпляр инициализирован
changeИзменено поле формы
beforeSubmitПеред отправкой запроса (можно отменить через cancel: true)
successОтвет получен. data.append = true — для loadMore
errorОшибка запроса
afterSubmitПосле завершения запроса (всегда)
seoUpdateSEO-данные обновлены

Методы

javascript
instance.submit()                    // Применить фильтры
instance.reset()                     // Сбросить всё
instance.loadMore()                  // Загрузить следующую страницу
instance.setFilter('color', ['red']) // Установить фильтр
instance.removeFilter('color')       // Убрать фильтр
instance.goToPage(3)                 // Перейти на страницу
instance.syncFormWithState()         // Синхронизировать форму с state

Шаблоны по умолчанию

Встроенные шаблоны находятся в:

core/components/mfilter/elements/chunks/

Для кастомизации скопируйте в свою папку и укажите путь через параметр tpl*.