Меню для UMI.CMS. Разные классы для ссылок в меню

Для чего это может понадобится? Ну например у Вас есть меню, которое сформированно в одном ненумерованном списке, а надо некоторые пункты этого меню оформить как-то иначе, чем всё остальное меню. Если кому-то не понятно сейчас всё поясню.

Итак, что у нас есть. Меню, в виде ненумерованного списка, т.е. например такого вида:

или в виде кода:

<ul>
    <li><a>Первый пункт меню</a></li>
    <li><a>Второй пункт меню</a></li>
    <li><a>Третий пункт меню</a></li>

    <li><a>Четвертый пункт меню</a></li>
</ul>

А нам нужно сделать так, чтоб для каждой ссылки мы могли прописать свой класс, и оформить его через CSS. Например вот так

<ul>
    <li class="linck1"><a>Первый пункт меню</a></li>

    <li class="l_i_n_c_k"><a>Второй пункт меню</a></li>
    <li class="this_linck"><a>Третий пункт меню</a></li>
    <li class=""><a>Четвертый пункт меню</a></li>

</ul>

И вот теперь самое интересное. У самой UMI стандарто данного функционала нет, но это можно поправить. Для этого в админке сайта идем Модули->Шаблоны данных.

Дальше для "Типа данных" - "Страница контента" добавляем новую группу. Назовем эту новую группу "Дополнительные параметры для меню" (хотя как Вы назовете это уже Ваше дело). И в этой группе добавляем новое поле. Ну... пускай это будет "класс меню" и ставим "Тип" - "Строка".

В итоге у нас есть группа "Дополнительные параметры для меню", идентификатор которой я изменил на "more_params_for_menu", и "Поле" с идентификатором "class_menu". Основные приготовления в админке закончены. Теперь если мы зайдем в редактирование страницы контента или попробуем создать новую страницу, то увидим наше дополнительное поле, куда и нужно будет прописать название класса для CSS.

Теперь осталось немного подпилить шаблон для меню сайта, и получим окончательный результат. Для этого открываем наш шаблон с меню, который находится в папке ~/xsltTpls/modules/content и называется menu.xsl и правим блок item.

<xsl:template match="udata[@module = 'content' and @method = 'menu']//item">
<li>
<xsl:attribute name="class"><xsl:value-of select="document(concat('upage://' , @id))//group[@name = 'more_params_for_menu']/property[@name = 'class_menu']/value" /></xsl:attribute>
<a href="{@link}">
<xsl:apply-templates select="@status" />
<xsl:value-of select="@name" />

</a>
<xsl:apply-templates select="items" />
</li>
</xsl:template>	

Вот как бы и все. Останется в файле стилей для наших классов прописать стили, и радоваться что так все легко и красиво. Если кому-то пригодиться, то пользуйтесь. А я теперь так же не буду лишний раз вспоминать и копаться в записях что и как надо делать.

Спасибо тех.поддерже UMI за помощь в реализации данного решения.

22.06.2011