
Сниппеты
mFilter предоставляет два основных сниппета для работы с фильтрацией.
Обзор
| Сниппет | Назначение |
|---|---|
| mFilter | Вывод отфильтрованных результатов |
| mFilterForm | Рендеринг формы фильтров |
Типичное использование
fenom
{* Форма фильтров в сайдбаре *}
<aside>
{'!mFilterForm' | snippet}
</aside>
{* Результаты фильтрации *}
<main>
{'!mFilter' | snippet : [
'element' => 'msProducts',
'paginator' => 'pdoPage',
'parents' => $_modx->resource.id,
'limit' => 24
]}
{$_modx->getPlaceholder('page.nav')}
</main>Режимы работы
Element/Paginator режим (рекомендуемый)
Делегирует получение и рендеринг данных внешним сниппетам:
fenom
{'!mFilter' | snippet : [
'element' => 'msProducts', {* Сниппет для данных *}
'paginator' => 'pdoPage', {* Сниппет для пагинации *}
'parents' => 5,
'limit' => 24,
'tpl' => 'mfilter.row'
]}Как это работает:
- mFilter получает все ID товаров через
elementсreturnIds=1 - Применяет фильтры к этим ID
- Передаёт отфильтрованные ID в
paginator paginatorвызываетelementдля рендеринга
Legacy режим
mFilter сам выполняет запросы и рендеринг (без внешних сниппетов):
fenom
{'!mFilter' | snippet : [
'parents' => 5,
'limit' => 24,
'tpl' => 'product.row',
'class' => 'msProduct'
]}Используется когда нужен полный контроль над запросом.
AJAX
Оба сниппета поддерживают AJAX-обновление без перезагрузки страницы.
Автоматический AJAX
По умолчанию включён. Форма отправляется через JavaScript, результаты обновляются динамически.
Отключение AJAX
fenom
{'!mFilterForm' | snippet : ['ajax' => 0]}
{'!mFilter' | snippet : ['ajax' => 0]}Режимы AJAX
| Режим | Описание |
|---|---|
form | Отправка по нажатию кнопки |
instant | Отправка при изменении любого фильтра |
fenom
{'!mFilterForm' | snippet : ['ajaxMode' => 'instant']}