
Описание сниппета
Сниппет позволяет не генерировать меню для каждой страницы отдельно только ради того чтобы поставить 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}} на класс активного элемента, а остальные убрать, что и делает сниппет. В комплект к сниппету входит плагин, который очищает кэш при нажатии кнопки «Обновить сайт» в админке.
Важный параметр сниппета — cacheSuffix. В примере создаётся кэш для всего сайта, но можно создавать кэш для отдельных родительских категорий, а внутри одной категории всё будет браться из кэша:
&cacheSuffix=`[[*parent]]`
Данный сниппет можно использовать не только для меню, а например для разных слайдеров и т.п. блоков, которые на сайте не меняются на разных страницах.
Сниппет menuCaching в репозитории MODX: http://modx.com/extras/package/menucaching
Добавлено
Результаты тестирования с большим меню. Вызовы обоих сниппетов некэшированные, т.е. [[!snippet]] (для теста, в реальности надо кэшировать).
Wayfinder
Первый вызов любой из страниц где есть меню: 2.5815 сек.
Переход на любую другую страницу с этим же меню: 2.4566 сек. (т.е. хвалёный cacheResults не помогает)
Обновляем страницу: 1.0021 сек. (только в этом случае cacheResults спасает)
Тот же Wayfinder, через menuCaching
Первый вызов любой из страниц где есть меню: 2.4842 сек. (в рамках погрешности, естественно разницы нет)
Переход на любую другую страницу с этим же меню: 0.7008 сек. (результат тот же, а время отличается)
Обновляем страницу: 0.4187 сек.

