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

mFilterCrumbs ​

Сниппет выводит хлебные крошки с выбранными фильтрами. Работает поверх pdoCrumbs.

Описание ​

Вывод зависит от адреса страницы:

  • Страница с фильтрами — фильтры в SEO-адресе: /catalog/color--red/. Сниппет берёт крошки разделов у pdoCrumbs, добавляет по крошке на каждый фильтр и выводит всё своими чанками. В выводе — обёртка nav.mfilter-crumbs, микроразметка Schema.org, при schemaJsonLd — JSON-LD.
  • Остальные страницы — без фильтров или с фильтрами в строке запроса: ?color=red. Сниппет передаёт вызов pdoCrumbs целиком, и тот выводит крошки своими чанками (<ol class="breadcrumb">), без микроразметки и JSON-LD.

Крошку фильтра даёт сегмент адреса вида ключ--значение. Диапазоны — цена, даты — и сегменты из паттернов URL крошек не дают. После фильтрации без перезагрузки крошки не обновляются — остаются такими, как при загрузке страницы.

Параметры ​

Свои параметры ​

ПараметрПо умолчаниюОписание
showFilterCrumbstrueПоказывать крошки фильтров
tplFilterCrumbкак tplЧанк крошки фильтра, кроме последней: её выводит tplCurrent. При одном фильтре в адресе не применяется
schemaJsonLdfalseДобавить JSON-LD в конец вывода. Работает только на странице с фильтрами в SEO-адресе

Чанки ​

Значения по умолчанию из таблицы действуют на странице с фильтрами в SEO-адресе. На остальных страницах — значения по умолчанию pdoCrumbs, а чанки, переданные в вызове, pdoCrumbs выводит и там.

ПараметрПо умолчаниюОписание
tplвстроенный, с разметкой MicrodataЧанк крошки
tplCurrentвстроенныйЧанк текущей крошки (без ссылки)
tplHome—Чанк главной страницы
tplWrapperвстроенный: nav.mfilter-crumbs и olОбёртка списка. Получает {$output}

Параметры pdoCrumbs ​

ПараметрПо умолчаниюОписание
showCurrenttrueПоказывать текущую крошку. На странице с фильтрами при 0 скрывается последняя крошка фильтра, но в JSON-LD она остаётся
showHomefalseПоказывать главную страницу
fastModefalseБыстрый режим обработки чанков
outputSeparatorпусто на странице с фильтрами, перевод строки — на остальныхРазделитель между крошками
schemeзначение link_tag_schemeВид адресов разделов, как у pdoCrumbs

Прочие параметры pdoCrumbs действуют на остальных страницах. На странице с фильтрами не учитываются hideSingle, tplMax, toSeparatePlaceholders, tplOdd, чанки по номеру и direction.

Вывод ​

ПараметрПо умолчаниюОписание
toPlaceholder—Вывести в плейсхолдер вместо возврата
return—data — вернуть массив вместо HTML: все крошки, включая текущий раздел и главную при showHome, а на странице с фильтрами — и крошки фильтров. showCurrent здесь не учитывается
wrapIfEmptyfalseПрименять tplWrapper и к пустому результату

Переменные чанков ​

Общие ​

ПеременнаяОписание
{$id}ID ресурса (0 у крошки фильтра)
{$pagetitle}, {$menutitle}Заголовок раздела; у крошки фильтра — подписи значений через запятую
{$longtitle}Длинный заголовок раздела; у крошки фильтра — «Метка: значения», например «Цвет: Красный, Синий»
{$link}Адрес крошки. Адрес раздела — как у pdoCrumbs, зависит от scheme; адрес фильтра — от корня сайта: /catalog/color--red/
{$idx}Порядковый номер
{$position}Позиция для Schema.org — только на странице с фильтрами. Для своего чанка с разметкой Microdata на всех страницах берите {$idx}

Только у крошек фильтров ​

ПеременнаяОписание
{$is_filter}true, если это крошка фильтра
{$filter_key}Ключ фильтра: color, size
{$filter_label}Название фильтра: подпись из набора фильтров, затем лексикон mfilter.field.<ключ>, иначе ключ с заглавной буквы
{$filter_values}Массив подписей значений

Подпись значения — значение из адреса. Для числового vendor_id или vendor — имя производителя MiniShop3, для числового parent — заголовок раздела.

Крошки фильтров идут в порядке сегментов адреса, по одной на ключ. Адрес каждой — сегменты от начала до неё: /catalog/color--red/, /catalog/color--red/size--xl/.

Примеры ​

Базовый вызов ​

fenom
{'!mFilterCrumbs' | snippet : [
    'showHome' => 1
]}

С разметкой JSON-LD ​

fenom
{'!mFilterCrumbs' | snippet : [
    'showHome' => 1,
    'scheme' => 'abs',
    'schemaJsonLd' => true
]}

'scheme' => 'abs' нужен для верных адресов разделов в JSON-LD. При значении link_tag_scheme по умолчанию pdoCrumbs отдаёт адрес без начального /, и тот склеивается с доменом без разделителя: https://site.rucatalog/.

На странице с фильтрами сниппет добавит в конец вывода:

html
<script type="application/ld+json">
{
    "@context": "https://schema.org",
    "@type": "BreadcrumbList",
    "itemListElement": [
        {"@type": "ListItem", "position": 1, "name": "Главная", "item": "https://site.ru/"},
        {"@type": "ListItem", "position": 2, "name": "Каталог", "item": "https://site.ru/catalog/"},
        {"@type": "ListItem", "position": 3, "name": "Красный"}
    ]
}
</script>

Свои чанки ​

fenom
{'!mFilterCrumbs' | snippet : [
    'tpl' => '@INLINE <li><a href="{$link | esc}">{$menutitle | esc}</a></li>',
    'tplCurrent' => '@INLINE <li>{$menutitle | esc}</li>',
    'tplWrapper' => '@INLINE <nav><ul>{$output}</ul></nav>'
]}

На остальных страницах pdoCrumbs выведет эти же чанки — они переданы в вызове.

Без фильтров в крошках ​

fenom
{'!mFilterCrumbs' | snippet : [
    'showFilterCrumbs' => false
]}

Вывод в плейсхолдер ​

fenom
{'!mFilterCrumbs' | snippet : [
    'toPlaceholder' => 'crumbs'
]}

{* Позже в шаблоне *}
{$_modx->getPlaceholder('crumbs')}

Получение данных массивом ​

fenom
{set $crumbs = '!mFilterCrumbs' | snippet : ['return' => 'data']}
{foreach $crumbs as $crumb}
    {$crumb.menutitle} ({$crumb.link})
{/foreach}

SEO-разметка ​

На странице с фильтрами в SEO-адресе сниппет выводит микроразметку Schema.org:

html
<nav class="mfilter-crumbs" aria-label="Breadcrumb">
<ol itemscope itemtype="https://schema.org/BreadcrumbList">
    <li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
        <a itemprop="item" href="/"><span itemprop="name">Главная</span></a>
        <meta itemprop="position" content="1">
    </li>
    <li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
        <a itemprop="item" href="/catalog/"><span itemprop="name">Каталог</span></a>
        <meta itemprop="position" content="2">
    </li>
    <li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
        <span itemprop="name">Красный</span>
        <meta itemprop="position" content="3">
    </li>
</ol>
</nav>

На остальных страницах разметку задают чанки pdoCrumbs. Чтобы микроразметка была и там, передайте в вызове свои чанки с ней — pdoCrumbs их выведет.

CSS-стили ​

Базовые стили в mfilter.css действуют на обёртку .mfilter-crumbs — на странице с фильтрами или в своём tplWrapper с этим классом. Вид меняют модификаторы обёртки:

КлассЧто даёт
mfilter-crumbs--arrowРазделитель →
mfilter-crumbs--chevronРазделитель ›
mfilter-crumbs--compactКрошки компактнее

Четыре обёртки крошек: стандартная, mfilter-crumbs--arrow, mfilter-crumbs--chevron, mfilter-crumbs--compact

Сами правила — в assets/components/mfilter/css/web/mfilter.css.