Меню для 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