Многоуровневое меню на XSLT — различия между версиями
Материал из Umicms
Cmac (обсуждение | вклад) |
Whoa (обсуждение | вклад) |
||
(не показаны 2 промежуточные версии 1 участника) | |||
Строка 1: | Строка 1: | ||
== Инструкция == | == Инструкция == | ||
− | Вызываем с помощью протокола | + | Вызываем с помощью протокола udata результаты работы макроса '''%content menu()%''' и сразу же переходим к элементам меню, не отображая другой информации. |
<source lang="xml"> | <source lang="xml"> | ||
Строка 34: | Строка 34: | ||
</source> | </source> | ||
− | + | [[Категория:Верстка в XSLT]] | |
− | |||
− | |||
− |
Текущая версия на 13:45, 21 ноября 2018
Инструкция
Вызываем с помощью протокола 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>