Смысл патча в том, что он добавляет кэширование сгенереного nodelist. Я постарался сделать изменения, намменее всего затрагивающие код. По хорошему - его вообще нужно переписать, но обновляться будет трудно. Патч актуален для версии 1.5.4, думаю, что для других версий тоже будет актуален.
Для чего и почему?
Менеджер меню местами очень ресурсоемок, особенно, когда количество страниц очень большое. Например, для каждого элемента меню делается минимум 1 запрос в базу. Для 1-2х десятков страниц - это не особо актуально, а представьте - вам нужно вывести меню на 100 элементов и больше. Когда я посмотрел, как на одном из моих проектов количество запросов достигло 2000 - мне стало не по себе

Подробнее:
Работает следующим образом: первый раз всеравно придется генерировать все дерево (или его часть), от этого никуда не деться. Но сразу после генерации я записываю сгенереный список в файл. А при каждом вызове меню, вначале проверяю - есть ли этот файл, если да, то читается файл, и запускается смарти (перенес полностью кусок со смарти, тк иначе в код пришлось бы залезть основательно).
Итого на странице получилось
против
Теоретически изменения должны работать с любыми наборами параметров, кроме collapse="1" - в этом случае само дерево генерится заново, а параметры остаются прежними. Для этого случая возможно следует к параметрам идентификатора файла кэша добавить текущую страницу, но на текущий момент у меня не возникла такая необходимость. Возможно позже допишу или оставляю на ваше усмотрение.
Если кто обнаружит какие-либо ошибки в работе - просьба сообщить.
В приложениях - исправленый файл и патч.