Сниппет menuCaching для MODX Revolution

в 10:15, , рубрики: modx, modx revolution, кэширование, метки: ,

Идея сниппета очень проста. Часто требуется сделать на сайте меню, которое остаётся неизменным на всех страницах. Меняется только CSS-класс активного пункта меню. Зачем нам на каждой странице делать запросы в БД и генерировать меню, если требуется только поменять CSS-класс? А если это большое меню с выпадающими подуровнями, на его генерацию может тратиться слишком много ресурсов. Сниппет menuCaching позволяет избавить сервер от этой лишней работы.

Сниппет menuCaching для MODX Revolution

Описание сниппета

Сниппет позволяет не генерировать меню для каждой страницы отдельно только ради того чтобы поставить CSS-класс на активный пункт меню.
Меню генерируется только один раз для всего сайта, но активные пункты отмечаются.

Пример использования
[[menuCaching?
&snippetToCache=`Wayfinder`
&cacheSuffix=`top_menu`
&contexts=`web`
&startId=`0`
&level=`1`
&hereClass=`active`
&rowTpl=`@CODE: <li class="[[+wf.classnames]] {{active[[+id]]}}"><a href="[[+wf.link]]">[[+wf.linktext]]</a></li>`
]]

Рекомендуется создать набор параметров (например «top_menu») чтобы, опять же, избавить парсер MODX от лишней работы:

[[menuCaching@top_menu]]

Что здесь происходит, я думаю, вы уже догадались. В кэше меню хранится в таком виде:

<ul>
    <li class="first {{active1}}"><a href="">Пункт меню 1</a></li>
    <li class=" {{active2}}"><a href="">Пункт меню 2</a></li>
    <li class="last {{active3}}"><a href="">Пункт меню 3</a></li>
</ul>

Остаётся только заменить метки типа {{active1}} на класс активного элемента, а остальные убрать, что и делает сниппет.

Сниппет menuCaching в репозитории MODX: http://modx.com/extras/package/menucaching

Автор: Andchir

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js