Многоуровневое меню на XSLT — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
 
(не показаны 2 промежуточные версии 1 участника)
Строка 1: Строка 1:
 
== Инструкция ==
 
== Инструкция ==
  
Вызываем с помощью протокола [[udata]] результаты работы макроса '''%content menu()%''' и сразу же переходим к элементам меню, не отображая другой информации.
+
Вызываем с помощью протокола udata результаты работы макроса '''%content menu()%''' и сразу же переходим к элементам меню, не отображая другой информации.
  
 
<source lang="xml">
 
<source lang="xml">
Строка 34: Строка 34:
 
</source>
 
</source>
  
== Ссылки ==
+
[[Категория:Верстка в XSLT]]
 
 
* [http://brcd.linuxhosting.net.ru/xsltTpls/menu.xsl Пример XSLT шаблона]
 
[[Категория:Шаблонизаторы]][[Категория:Верстка в 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>