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

mFilterNav

Сниппет для создания SEO-навигации на основе значений фильтров.

Описание

mFilterNav генерирует навигационные меню из значений фильтров — например, список цветов, брендов или категорий со ссылками на отфильтрованные страницы. Параметры стилизованы под pdoMenu для удобства.

Применение:

  • SEO перелинковка в футере или сайдбаре
  • Навигация по брендам / производителям
  • Облако тегов / характеристик
  • Фильтры-ссылки вместо чекбоксов

Параметры

Основные

ПараметрПо умолчаниюОписание
parents0 (текущий)ID родительского ресурса
filterKeysКлючи фильтров для отображения (через запятую)

Источник данных (для счётчиков)

ПараметрПо умолчаниюОписание
elementСниппет для получения ID (msProducts, pdoResources)
depth10Глубина поиска для element

Шаблоны (стиль pdoMenu)

ПараметрПо умолчаниюОписание
tplвстроенныйШаблон элемента ссылки
tplOuter@INLINE <ul>{$output}</ul>Внешняя обёртка
tplGroupОбёртка группы (для группировки по filterKey)
tplHereШаблон активного элемента

CSS классы (стиль pdoMenu)

ПараметрПо умолчаниюОписание
firstClassfirstКласс первого элемента
lastClasslastКласс последнего элемента
hereClassactiveКласс активного элемента
rowClassКласс для всех элементов
outerClassКласс внешней обёртки

Поведение

ПараметрПо умолчаниюОписание
showCountfalseПоказывать количество товаров
hideEmptytrueСкрывать элементы с count=0
sortBylabelСортировка: label, count, sort_order
sortDirASCНаправление: ASC, DESC
limit0Лимит элементов (0 = без лимита)

Кэширование

ПараметрПо умолчаниюОписание
cachefalseВключить кэширование
cacheTime3600Время жизни кэша (секунды)

Плейсхолдеры в шаблонах

tpl / tplHere

ПлейсхолдерОписание
{$url}URL отфильтрованной страницы
{$label}Метка значения
{$value}Оригинальное значение
{$slug}Slug значения
{$filterKey}Ключ фильтра
{$count}Количество товаров
{$hasCount}true, если count доступен
{$showCount}Значение параметра showCount
{$idx}Порядковый номер (с 1)
{$isActive}true, если фильтр активен
{$isFirst}true, если первый элемент
{$isLast}true, если последний элемент
{$classNames}Собранные CSS классы

tplOuter

ПлейсхолдерОписание
{$output}HTML всех элементов
{$outerClass}Класс обёртки

tplGroup

ПлейсхолдерОписание
{$output}HTML элементов группы
{$filterKey}Ключ фильтра
{$count}Количество элементов

Примеры

fenom
<nav class="brands-nav">
    <h3>Бренды</h3>
    {'!mFilterNav' | snippet : [
        'parents' => $_modx->resource.id,
        'filterKeys' => 'vendor_id',
        'sortBy' => 'label'
    ]}
</nav>
fenom
{'!mFilterNav' | snippet : [
    'parents' => $_modx->resource.id,
    'filterKeys' => 'color',
    'element' => 'msProducts',
    'showCount' => true,
    'hideEmpty' => true,
    'tpl' => '@INLINE <li class="{$classNames}">
        <a href="{$url}">{$label} ({$count})</a>
    </li>'
]}

Несколько фильтров с группировкой

fenom
{'!mFilterNav' | snippet : [
    'parents' => $_modx->resource.id,
    'filterKeys' => 'brand,color,size',
    'tplGroup' => '@INLINE <div class="filter-group">
        <h4>{$filterKey}</h4>
        <ul>{$output}</ul>
    </div>',
    'tplOuter' => '@INLINE <div class="filter-nav">{$output}</div>'
]}

Топ-10 популярных значений

fenom
{'!mFilterNav' | snippet : [
    'parents' => $_modx->resource.id,
    'filterKeys' => 'brand',
    'element' => 'msProducts',
    'showCount' => true,
    'sortBy' => 'count',
    'sortDir' => 'DESC',
    'limit' => 10
]}

Горизонтальное меню

fenom
{'!mFilterNav' | snippet : [
    'parents' => $_modx->resource.id,
    'filterKeys' => 'category',
    'outerClass' => 'nav nav-pills',
    'rowClass' => 'nav-item',
    'hereClass' => 'active',
    'tpl' => '@INLINE <li class="{$classNames}">
        <a class="nav-link{if $isActive} active{/if}" href="{$url}">{$label}</a>
    </li>'
]}

Со своим классом для активного

fenom
{'!mFilterNav' | snippet : [
    'parents' => $_modx->resource.id,
    'filterKeys' => 'color',
    'hereClass' => 'is-selected',
    'tplHere' => '@INLINE <li class="{$classNames}">
        <span class="current">{$label}</span>
    </li>'
]}

Алфавитный указатель

fenom
{* Сортировка по названию *}
{'!mFilterNav' | snippet : [
    'parents' => $_modx->resource.id,
    'filterKeys' => 'brand',
    'sortBy' => 'label',
    'sortDir' => 'ASC',
    'outerClass' => 'brand-index'
]}

SEO применение

Перелинковка в футере

fenom
<footer>
    <div class="footer-links">
        <div class="footer-col">
            <h4>Популярные бренды</h4>
            {'!mFilterNav' | snippet : [
                'parents' => 5,
                'filterKeys' => 'vendor_id',
                'limit' => 10,
                'sortBy' => 'count',
                'sortDir' => 'DESC',
                'element' => 'msProducts'
            ]}
        </div>
        <div class="footer-col">
            <h4>По цвету</h4>
            {'!mFilterNav' | snippet : [
                'parents' => 5,
                'filterKeys' => 'color',
                'element' => 'msProducts',
                'hideEmpty' => true
            ]}
        </div>
    </div>
</footer>
fenom
<aside class="catalog-sidebar">
    {* Основная форма фильтров *}
    {'!mFilterForm' | snippet}

    {* Дополнительная текстовая навигация *}
    <div class="sidebar-links">
        <h4>Быстрый выбор</h4>
        {'!mFilterNav' | snippet : [
            'filterKeys' => 'brand,color',
            'limit' => 5,
            'showCount' => true,
            'element' => 'msProducts'
        ]}
    </div>
</aside>

Отличие от mFilterForm

mFilterFormmFilterNav
Интерактивная формаСтатические ссылки
Чекбоксы, слайдерыТолько ссылки
AJAX обновлениеПереход по URL
Комбинирование фильтровОдин фильтр на ссылку
Для пользователяДля SEO / навигации

Рекомендации

  • Используйте hideEmpty для скрытия пустых значений
  • element нужен только если используете showCount или hideEmpty
  • Для SEO-навигации кэширование (cache => true) рекомендуется
  • Ограничивайте limit для длинных списков