
sfMenu
Это самый функциональный и мощный сниппет! Для тех, кто знаком с pdoMenu не покажется сложным. Для формирования меню используется собственный класс. Очень многое взято из pdoMenu, в том числе почти вся поддержка классов. Очередное спасибо Василию.
Важно
Вывод результатов отличается от pdoMenu тем, что за сформированную ссылку на страницу здесь отвечает параметр [[+url]], а за её название параметр [[+name]].
Вообще можете задавать пустые чанки и проверять доступные плейсхолдеры:
Меню может формироваться с учётом количества результатов на странице. Для этого есть функция подсчётов на лету или использование значений из базы (которые обновляются при изменении товаров или в ручную).
Вообще параметров, которыми можно управлять меню много, что я наверно и не все проверил. Если будут проблемы - пишите в техническую поддержку на modstore, оперативно решим.
Основные параметры сниппета
| Название | По умолчанию | Описание |
|---|---|---|
| &rules | Список ID правил, ссылки которых нужно использовать в меню(несколько через запятую, также можно с минусом исключить ненужные) | |
| &parents | Список ID страниц, к которым привязаны правила (можно с минусом) | |
| &urls | Либо отдельно id сгенерированных ссылок из Таблицы URL (можно с минусом) | |
| &fast | 1 | Новый быстрый режим меню, который работает быстрее чем старый. Если включена опция countChildren=1, то быстрый режим отключается |
| &countChildren | 0 | Подсчёт перед формированием меню ресурсов(товаров) которые будут на странице (на больших меню рекомендую использовать значения из базы) |
| &mincount | 0 | Минимальное количество ресурсов для включения ссылки в меню. В быстром режиме можно передавать условие через параметр where {"total:>=":1} |
| &sortcount | 0 | Сортировка по количеству ресурсов, приоритетнее той что в sortby. В быстром режиме можно также в sortby передавать total |
| &relative | 0 | Экспериментальная перестройка меню исходя из выбранной SEO-страницы. Если активирована, то включает за собой параметры double, nesting, hideSubMenus и отключает groupbyrule |
| &onlyrelative | 0 | Показывает меню только на SEO страницах |
| &nesting | 0 | Виртуальное вкладывание ссылок в ссылки, построение дерева точнее |
| &hideSubMenus | 0 | Позволяет спрятать неактивные ветки меню, используйте вместе с параметром nesting. |
| &double | 0 | Дублирование ссылок при вкладывании, так как ссылки могут относится к нескольким правилам, так сказать мультикатегории; |
| &sortby | count | Сортировка. По умолчанию, по количеству просмотров страницы. |
| &sortdir | DESC | Порядок сортировки. По умолчанию, по убыванию |
| &level | 0 | Максимальный уровень для ограничения ссылок. Уровень = количеству полей, из которых она состоит. 0 - не ограничен |
| &minlevel | 0 | Минимальный уровень для ограничения ссылок. 0 - не ограничен. |
| &limit | 0 | Лимит на выборку ссылок. При использовании подсчётов через countChildren количество ссылок на странице может быть меньше, так сначала выберутся ссылки, а потом могут быть отброшены другими условиями. При быстром режиме такого нет. |
| &offset | 0 | Смещение для использования совместно с limit |
| &scheme | Схема для формирования ссылок на ресурсы к ссылкам. Может принимать параметры "full", "abs", "http", "https", "-1" или пусто. | |
| &context | По умолчанию не указан. Укажите, если есть какие-то проблемы при формировании адресов для ссылок | |
| &cache | 1 | Кэш, по умолчанию включён. Для того чтобы каждый раз не собирать ссылки в базе. Подсчёты также сохраняются в кэш. |
| &cacheTime | 3600 | Время для кэша, указывается в секундах. По умолчанию 1 час. |
| &groupbyrule | 0 | Группировка по правилам (задействуется отдельный чанк-обёртка указанный в &tplGroup) |
| &groupsort | level | Сортировка групп по количеству полей в правиле |
| &groupdir | ASC | Направление сортировки групп |
| &userank | 0 | Использование приоритетов правила для сортировки групп |
| &showHidden | 1 | Показывать скрытые пункты в меню. Можно отключить, если вы в ручную прорабатываете пункты меню в таблице URL, которые нужно показывать в меню. |
| &count_where | Дополнительное условие для подсчёта ресурсов. Используется только при активном countChildren | |
| &fastMode | 0 | Параметр, который попадает в pdoTools для обработки чанков |
| &where | Дополнительное условие в формате JSON. Можно задавать условие по классам sfUrls,sfDictionary,sfUrlWord. То есть можно ограничить всё меню только ссылками, связанными с синим цветом. | |
| &toPlaceholder | Если не пусто, сниппет сохранит все данные в плейсхолдер с этим именем вместо вывода на экран. |
Доступные чанки
Почти полностью совпадают с чанками из pdoMenu
| Название | Описание |
|---|---|
| &tpl | Стандартный чанк вывода одной ссылки. По умолчанию @INLINE <li{$classes}><a href="{$url}">{$name}{if $total?} ({$total}){/if}</a>{$wrapper}</li> |
| &tplOuter | Чанк обёртка меню. По умолчанию @INLINE <ul{$classes}>{$wrapper}</ul> |
| &tplGroup | Чанк обёртка при группировке по правилам. По умолчанию @INLINE <div><h4>{$name}</h4>{$wrapper}</div> |
| &tplHere | Чанк текущего документа |
| &tplInner | Чанк обертки внутренних пунктов меню. Если пуст - будет использовать &tplOuter |
| &tplInnerRow | Чанк обертка внутреннего пункта меню |
| &tplInnerHere | Чанк обертка текущего внутреннего пункта меню |
| &tplParentRow | Чанк оформления ссылки, у которой есть вложенные ссылки |
| &tplParentRowActive | Чанк оформления активной ссылки, у которой есть вложенные ссылки |
| &tplParentRowHere | Чанк оформления текущей ссылки, у которой есть вложенные ссылки |
Параметры CSS классов
Эти параметры задают значение плейсхолдера [[+classes]] для различных элементов меню.
| Название | Описание |
|---|---|
| &firstClass | Класс для первого пункта меню. По умолчанию: first |
| &hereClass | Класс для активного пункта меню. По умолчанию: active |
| &innerClass | Класс внутренних ссылок меню. |
| &lastClass | Класс последнего пункта меню. По умолчанию: last |
| &levelClass | Класс уровня меню. Например, если укажите «level», то будет «level1», «level2» и т.д. |
| &outerClass | Класс обертки меню |
| &parentClass | Класс категории меню |
| &rowClass | Класс одной строки меню |
| &selfClass | Класс текущего документа в меню. |
Примеры использования
Меню быстрого варианта и подсчётами из базы, с сортировкой по ним и от пяти результатов с прописанными дополнительными классами на стандартном чанке.
modx[[!sfMenu? &fast=`1` &sortby=`total` &sortdir=`DESC` &mincount=`5` &outerClass=`navigation` &innerClass = `inner` &levelClass = `level` &parentClass = `parent` &rowClass = `rows` &selfClass = `self` ]]Пример с группировкой на отдельной странице с исключением «пустых» страниц. Здесь ещё используется функция подсчётов через countChildren и полностью синтаксис MODX.
modx[[!sfMenu? &countChildren=`1` &groupbyrule=`1` &sortby=`createdon` &sortdir=`ASC` &mincount=`1` &parents=`9` &tplGroup=`@INLINE <div class="col-sm-6"><h4>[[+name]] <small>[[+total]] ссылок</small></h4>[[+wrapper]]</div>` &tplOuter=`@INLINE <ul[[+classes]]>[[+wrapper]]</ul>` &tpl=`@INLINE <li[[+classes]]><a href="[[+url]]">[[+name]]</a> <nobr><span>([[+total]] [[+total:units=`товар|товара|товаров`]])</span><small> - [[+count]] [[+count:units=`просмотр|просмотра|просмотров`]]</small></nobr>[[+wrapper]]</li>` ]]Пример с вложенностью ссылок от c результатами от двух товаров с предыдущим чанком
modx[[!sfMenu? &countChildren=`1` &nesting=`1` &double=`0` &mincount=`2` &parents=`9` ]]
