Использование условий на примере макроса core navibar в шаблоне demodizzy — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
Строка 61: Строка 61:
 
следующих код:
 
следующих код:
 
<source lang="xml">
 
<source lang="xml">
<xsl:variable name="isMain" select=".//page/@is-default" />
+
        <xsl:variable name="isMain" select=".//page/@is-default" />
</source>
+
</source>
 +
если мы будет находится на главной странице, то переменная будет равна "1".
  
 +
Теперь в файле /templates/demodizzy/xslt/layouts/default.xsl обрамим вызов макроса %core navibar()%
 +
условием, код примет примерно следующий вид:
 
<source lang="xml">
 
<source lang="xml">
</source>
+
        <xsl:if test="not($isMain)">
 +
                      <xsl:apply-templates select="document('udata://core/navibar')/udata"/>
 +
        </xsl:if>
 +
</source>
  
 
== Вывод навигации для системных страниц  ==  
 
== Вывод навигации для системных страниц  ==  

Версия 12:57, 4 сентября 2013

Актуально для версии 2.9.1

Вывод постраничной навигации

Для вывода постраничной навигации в системе предусмотрен макрос %core navibar()%, см. "Полезные ссылки".

Решение

Добавим в файл /templates/demodizzy/xslt/modules/content/common.xsl перед иклюдами (include) следующий код:

        <xsl:template match="udata[@method = 'navibar']">
			<xsl:apply-templates select="items/item" mode="navibar"/>
	</xsl:template>

	<xsl:template match="item" mode="navibar">
			<a href="{@link}"><xsl:value-of select="."/></a>
			<xsl:text> » </xsl:text>
	</xsl:template>

	<xsl:template match="item[position() = last()]" mode="navibar">
			<xsl:value-of select="."/>
	</xsl:template>

Это шаблон для вывода результатов работы макроса, теперь нужно добавить вызов макрос, для этого добавим в файл /templates/demodizzy/xslt/layouts/default.xsl после вызова меню

        <xsl:apply-templates select="document('udata://content/menu/(null)/1/')" mode="top_menu" />

следующий код:

        <xsl:apply-templates select="document('udata://core/navibar')/udata"/>

Результат

Navibar1.png

Как мы видим главной страницы в навигации не, так как она не стоит на одном уровне иерархии со странице "Каталог товаров", а мы бы хотели, чтобы в навигации она присутствовала, это задача решается версткой, добавьте в первый <xsl:template> в шаблоне вывода результатов макроса ссылку на главную страницу с текстом, то есть его окончательный код будет примерно следующим:

        <xsl:template match="udata[@method = 'navibar']">
			<a href="/">Главная</a> »
			<xsl:apply-templates select="items/item" mode="navibar"/>
	</xsl:template>

а выглядеть это будет вот так:

Navibar3.png

Вывод навигации на всех страницах, кроме главной

Допустим, мы не хотим, чтобы на главной странице выводился результат работы макроса, так как это лишено смысла и портит внешний вид: Navibar2.png

Для этого воспользуемся конструкцией <xsl:if>, см. "Полезные ссылки".

Решение

Сначала создадим переменную, которая будет отражаться является ли данная страница главной, для этого поместите в файл /templates/demodizzy/xslt/default.xsl, в нем заданы константы в demodizzy, следующих код:

        <xsl:variable name="isMain" select=".//page/@is-default" />

если мы будет находится на главной странице, то переменная будет равна "1".

Теперь в файле /templates/demodizzy/xslt/layouts/default.xsl обрамим вызов макроса %core navibar()% условием, код примет примерно следующий вид:

        <xsl:if test="not($isMain)">
                       <xsl:apply-templates select="document('udata://core/navibar')/udata"/>
        </xsl:if>

Вывод навигации для системных страниц

Полезные ссылки