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