Многоуровневое меню на XSLT
Материал из Umicms
Инструкция
Вызываем с помощью протокола udata результаты работы макроса %content menu()% и сразу же переходим к элементам меню, не отображая другой информации.
<xsl:template match="/"> <html> <body> <ul><xsl:apply-templates select="document('udata://content/menu')//item" mode="menu" /></ul> </body> </html> </xsl:template>
В следущем шаблоне (ориентируясь по тегу item) понимаем, что является ссылкой и делаем ее ссылкой & требуем от каждого id получения вложенных id (являющихся под-элементами меню), передвигаясь от корня. Если ничего не получаем - значит подэлементов у текущего элемента меню нет и отображатся в нашем двухуровневом меню они не будут
<xsl:template match="item" mode="menu"> <li> <a href="{@link}"><xsl:value-of select="." /></a> <xsl:apply-templates select="document(concat('udata://content/menu///', @id))/udata"/> </li> </xsl:template>
Обращаемся к полученной информации от протокола udata, сортируя по параметру метод и выводим под-элементы меню:
<xsl:template match="udata[@method = 'menu']"> <ul> <xsl:apply-templates select=".//item" mode="menu"/> </ul> </xsl:template>
