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

mFilter

Основной сниппет для вывода отфильтрованных результатов.

Параметры

Режим Element/Paginator

ПараметрПо умолчаниюОписание
elementСниппет для получения данных (msProducts, pdoResources, getTickets)
paginatorpdoPageСниппет для пагинации
lexiconsДополнительные лексиконы для загрузки (через запятую)

Выборка данных

ПараметрПо умолчаниюОписание
parentsтекущий ресурсID родительских ресурсов (через запятую)
depth10Глубина поиска в дочерних категориях
limit20Количество элементов на странице
offset0Начальное смещение
sortbypagetitleПоле сортировки
sortdirASCНаправление сортировки (ASC, DESC)
whereДополнительные условия (JSON)
selectПоля для выборки (JSON)

Шаблоны

ПараметрПо умолчаниюОписание
tplmfilter.rowШаблон одной строки результата
tplOutermfilter.outerВнешний шаблон (обёртка)
tplEmptyШаблон для пустых результатов
tplPaginationmfilter.paginationШаблон пагинации
tplsJSON с альтернативными шаблонами для переключения вида

TV и поля

ПараметрПо умолчаниюОписание
includeTVsfalseВключить TV в результаты
processTVsИмена TV для обработки (через запятую)

Отображение

ПараметрПо умолчаниюОписание
showHiddenfalseПоказывать скрытые ресурсы
showUnpublishedfalseПоказывать неопубликованные
showDeletedfalseПоказывать удалённые

AJAX

ПараметрПо умолчаниюОписание
ajaxfalseВозвращать JSON для AJAX-запросов
ajaxModefullРежим AJAX: results, suggestions, full

Пагинация

ПараметрПо умолчаниюОписание
pageParampageИмя GET-параметра страницы
totalVarmfilter.totalПлейсхолдер для общего количества
pageCountVarmfilter.pageCountПлейсхолдер для количества страниц

Вывод

ПараметрПо умолчаниюОписание
toPlaceholdersfalseВывести результаты в плейсхолдеры
outputSeparator\nРазделитель между строками

Примеры

Базовый вызов с MiniShop3

fenom
{'!mFilter' | snippet : [
    'element' => 'msProducts',
    'paginator' => 'pdoPage',
    'parents' => $_modx->resource.id,
    'limit' => 24,
    'tpl' => 'mfilter.row'
]}

С pdoResources (без MS3)

fenom
{'!mFilter' | snippet : [
    'element' => 'pdoResources',
    'paginator' => 'pdoPage',
    'parents' => $_modx->resource.id,
    'includeTVs' => 'image,price',
    'limit' => 20,
    'tpl' => 'catalog.row'
]}

Переключение вида (grid/list)

fenom
{* Кнопки переключения *}
<div class="view-toggle">
    <a href="?tpl=grid" data-mfilter-tpl="grid">Сетка</a>
    <a href="?tpl=list" data-mfilter-tpl="list">Список</a>
</div>

{'!mFilter' | snippet : [
    'element' => 'msProducts',
    'paginator' => 'pdoPage',
    'parents' => $_modx->resource.id,
    'tpl' => 'mfilter.grid',
    'tpls' => ['grid' => 'mfilter.grid', 'list' => 'mfilter.row']
]}

Сортировка из URL

Сортировка определяется из SEO URL или GET-параметра sort:

/catalog/sort_price-asc/     → сортировка по цене (возрастание)
/catalog/?sort=price-desc    → сортировка по цене (убывание)
fenom
{* Выпадающий список сортировки *}
<select data-mfilter-sort>
    <option value="pagetitle-asc">По названию</option>
    <option value="price-asc">Сначала дешёвые</option>
    <option value="price-desc">Сначала дорогие</option>
    <option value="createdon-desc">Новинки</option>
</select>

{'!mFilter' | snippet : [
    'element' => 'msProducts',
    'sortby' => 'pagetitle',
    'sortdir' => 'ASC'
]}

Лимит из URL

/catalog/limit_48/           → 48 товаров на странице
/catalog/?limit=96           → 96 товаров на странице
fenom
<select data-mfilter-limit>
    <option value="24">24</option>
    <option value="48">48</option>
    <option value="96">96</option>
</select>

{'!mFilter' | snippet : [
    'element' => 'msProducts',
    'limit' => 24
]}

Дополнительные условия

fenom
{'!mFilter' | snippet : [
    'element' => 'msProducts',
    'parents' => $_modx->resource.id,
    'where' => ['Data.price:>' => 0, 'Data.favorite' => 1]
]}

Пустые результаты

fenom
{'!mFilter' | snippet : [
    'element' => 'msProducts',
    'tplEmpty' => '@INLINE <p>Товары не найдены. Попробуйте изменить параметры фильтра.</p>'
]}

Legacy режим (без element)

fenom
{'!mFilter' | snippet : [
    'parents' => $_modx->resource.id,
    'class' => 'msProduct',
    'sortby' => 'pagetitle',
    'limit' => 20,
    'tpl' => 'msProducts.row',
    'includeTVs' => 'image'
]}

Плейсхолдеры

После выполнения сниппета доступны плейсхолдеры:

ПлейсхолдерОписание
[[+mfilter.total]]Общее количество результатов
[[+mfilter.pageCount]]Количество страниц
[[+mfilter.page]]Текущая страница
[[+mfilter.limit]]Элементов на странице
[[+mfilter.sort]]Текущая сортировка (price-asc)
[[+mfilter.sortBy]]Поле сортировки (price)
[[+mfilter.sortDir]]Направление (asc)

Для пагинации pdoPage:

ПлейсхолдерОписание
[[+page.nav]]HTML пагинации
[[+page.total]]Всего элементов
[[+page.pages]]Всего страниц

Интеграция с mSearch

fenom
{'!mFilter' | snippet : [
    'element' => 'msProducts',
    'paginator' => 'pdoPage',
    'parents' => $_modx->resource.id,
    'search' => $_GET['mse_query']
]}

Подробнее: Интеграция с mSearch