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


Сниппет для отображения выбранных (активных) фильтров с возможностью их сброса.
mFilterSelected показывает блок с текущими активными фильтрами. Пользователь может удалить отдельные фильтры или сбросить все сразу. Компонент интегрируется с JavaScript для live-обновлений при AJAX-фильтрации.
Особенности:
| Параметр | По умолчанию | Описание |
|---|---|---|
resourceId | текущий ресурс | ID ресурса для получения конфигурации фильтров |
| Параметр | По умолчанию | Описание |
|---|---|---|
tplOuter | mfilter.selected.outer | Внешний контейнер |
tplGroup | mfilter.selected.group | Шаблон группы (для группировки по filterKey) |
tplItem | mfilter.selected.item | Шаблон одного элемента фильтра |
tplReset | mfilter.selected.reset | Шаблон кнопки сброса |
| Параметр | По умолчанию | Описание |
|---|---|---|
grouped | true | Группировать элементы по ключу фильтра |
showLabels | true | Показывать метки фильтров (Цвет:, Размер:) |
showReset | true | Показывать кнопку "Сбросить всё" |
hideWhenEmpty | true | Скрывать блок при отсутствии фильтров |
resetText | из лексикона | Текст кнопки сброса |
| Параметр | По умолчанию | Описание |
|---|---|---|
toPlaceholder | — | Вывести в плейсхолдер |
| Плейсхолдер | Описание |
|---|---|
{$items} | HTML всех элементов/групп |
{$reset} | HTML кнопки сброса |
{$count} | Количество активных фильтров |
{$empty} | true, если фильтры не выбраны |
{$hidden} | true, если блок должен быть скрыт |
{$filterLabels} | JSON-объект меток для JS |
| Плейсхолдер | Описание |
|---|---|
{$key} | Ключ фильтра |
{$label} | Метка фильтра |
{$items} | HTML элементов группы |
{$count} | Количество значений в группе |
{$showLabel} | Показывать метку |
| Плейсхолдер | Описание |
|---|---|
{$key} | Ключ фильтра |
{$value} | Значение фильтра |
{$filterLabel} | Метка фильтра |
{$valueLabel} | Метка значения |
{$label} | Алиас для valueLabel |
| Плейсхолдер | Описание |
|---|---|
{$text} | Текст кнопки |
{'!mFilterSelected' | snippet}{'!mFilterSelected' | snippet : [
'grouped' => false
]}{'!mFilterSelected' | snippet : [
'showLabels' => false,
'showReset' => false
]}{'!mFilterSelected' | snippet : [
'resetText' => 'Очистить фильтры'
]}{'!mFilterSelected' | snippet : [
'tplOuter' => '@INLINE
<div class="selected-filters" data-mfilter-selected>
{$items}
{$reset}
</div>',
'tplItem' => '@INLINE
<span class="filter-tag" data-mfilter-remove="{$key}" data-value="{$value}">
{$label} <button type="button">×</button>
</span>',
'tplReset' => '@INLINE
<button type="button" data-mfilter-reset class="btn btn-link">{$text}</button>'
]}Рекомендуется размещать над результатами фильтрации:
<div class="catalog">
<aside class="catalog-sidebar">
{'!mFilterForm' | snippet}
</aside>
<main class="catalog-content">
{* Выбранные фильтры *}
{'!mFilterSelected' | snippet}
{* Результаты *}
{'!mFilter' | snippet : [
'element' => 'msProducts',
'paginator' => 'pdoPage',
'parents' => $_modx->resource.id
]}
</main>
</div>Блок автоматически обновляется при AJAX-фильтрации благодаря JS-компоненту SelectedFilters.
| Атрибут | Описание |
|---|---|
data-mfilter-selected | Контейнер выбранных фильтров |
data-mfilter-remove="{key}" | Кнопка удаления значения |
data-value="{value}" | Значение для удаления |
data-mfilter-reset | Кнопка сброса всех фильтров |
<div class="selected-filters" data-mfilter-selected>
<div class="filter-group">
<span class="filter-label">Цвет:</span>
<span class="filter-tag" data-mfilter-remove="color" data-value="red">
Красный <button>×</button>
</span>
<span class="filter-tag" data-mfilter-remove="color" data-value="blue">
Синий <button>×</button>
</span>
</div>
<button data-mfilter-reset>Сбросить всё</button>
</div><div class="mfilter-selected{if $hidden} mfilter-selected--hidden{/if}"
data-mfilter-selected
data-filter-labels='{$filterLabels}'>
{if !$empty}
<div class="mfilter-selected__items">
{$items}
</div>
{$reset}
{/if}
</div><span class="mfilter-selected__tag"
data-mfilter-remove="{$key}"
data-value="{$value}">
{$label}
<button type="button" class="mfilter-selected__remove" aria-label="Удалить">×</button>
</span><button type="button" class="mfilter-selected__reset" data-mfilter-reset>
{$text}
</button>