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

Материал из Umicms
Перейти к:навигация, поиск

Актуально для версии 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" />

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

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

Результат

Теперь результат работы макроса будет выводится на всех страницах, кроме главной.

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

Как мы можем заметить на системных страницах, таких как корзина товаров, личный кабинет, регистрация и др. макрос не выводит текущее название страницы:

Navibar5.png

Решение

В данной ситуации нам понадобиться еще одно условие, если страница является системной, то выводить header страницы, дополнительное условие мы будем организовывать с помощью конструкции <xsl:choose>, см. "Полезные ссылки".

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