Строка навигации с помощью XML/XSLT
Строка навигации с помощью XML/XSLTМорда: СтандартнаяСераяЗеленая Главная / Портфель / Строка навигации с помощью XML/XSLT Запомнить № 10:
Строка навигации с помощью XML/XSLTОпубликовано:
8 августа 2002Изменено:
17 января 2003 |
Оказывается, что сделать строку навигации (breadcrumbs) с помощью XML/XSLT достаточно просто. Для этого необходимо иметь XML код всех разделов сайта. Например вот в таком виде:
<sections>
<item id="1" in="yes">
<title>Принтеры</title>
<dir>printers</dir>
<item id="11" in="yes" hit="yes">
<title>Лазерные</title>
<dir>laser</dir>
</item>
<item id="12">
<title>Струйные</title>
<dir>ink</dir>
</item>
</item>
<item id="2">
<title>Мониторы</title>
<dir>monitors</dir>
<item id="21">
<title>Электронно-лучевые</title>
<dir>crt</dir>
</item>
<item id="22">
<title>Жидко-кристаллические</title>
<dir>tft</dir>
</item>
</item>
</sections>
Теперь немного объяснений к этому XML. item — это собственно и есть раздел сайта, он может иметь вложенные элементы item (подразделы) с неограниченным уровнем вложенности, таким образом, отражая иерархическую структуру сайта., title — это название раздела, dir — название каталога, в котором размещен раздел, id — уникальный идентификатор раздела (здесь не используется).
Далее самые интересные атрибуты, — in и hit. Эти атрибуты могут присутствовать, а могут и не присутствовать у item. In означает что мы находимся в данном разделе (не обязательно на главной странице раздела section front), а hit устанавливается когда мы находимся на главной странице какого либо раздела.
В вышеприведенном примере, мы находимся в разделе Продукты (in установлен) и находимся на главной странице подраздела Пиво, раздела продукты (in и hit установлены). О том, как их устанавливать динамически (с помощью 3-го парсера), ну и о том, как вообще такой код парсером формировать, расскажу как-нибудь в другой раз.
Итак, с помощью следующей XSLT таблицы получается прекрасная строка навигации:<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
<xsl:template match="sections">
<xsl:choose>
<xsl:when test="//item[@in]">
<a href="/">Главная</a>
<xsl:text> / </xsl:text>
<xsl:apply-templates select="//item[@in]"/>
</xsl:when>
<xsl:otherwise>
<xsl:text>Главная</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="//item[@in]">
<xsl:choose>
<xsl:when test="@hit">
<xsl:value-of select="title"/>
</xsl:when>
<xsl:otherwise>
<xsl:choose>
<xsl:when test="child::item[@in]">
<xsl:call-template name="lnk"/>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="lnk"/>
<xsl:text> Название страницы</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="lnk">
<a>
<xsl:attribute name="href">
<xsl:text>/</xsl:text>
<xsl:for-each select="ancestor-or-self::item">
<xsl:value-of select="dir"/>
<xsl:text>/</xsl:text>
</xsl:for-each>
</xsl:attribute>
<xsl:value-of select="title"/>
</a>
<xsl:text> / </xsl:text>
</xsl:template>
</xsl:stylesheet>для данного XML получится:Главная / Принтеры / Лазерные
Причем на словах Главная и Принтеры, ставятся ссылки, а на слове Лазерные нет (потому что мы находимся на главной странице этого подраздела).
<< № 9 | Содержание | № 11 >>Из последнего№ 24 Работаем с .htpasswd 08.11.2003 (Изменено: 10.01.2004)№ 23 Самодокументирование парсерного кода 14.09.2003№ 22 Работаем с RSS 21.02.2003№ 21 Топологическая сортировка 16.02.2003№ 20 Установка 3-го парсера на хостинге 350mb.ru 12.02.2003ПолезноеParser 3Parser.ruXMLRaleigh.ruXMLWWWserge@design.ruДизайн и usabilityДублирующая навигацияНавигация на сайте.Главная / Портфель / Строка навигации с помощью XML/XSLT Запомнить Информация о сервереАвторРегистрация/настройки
содержание | 2 | рецепты приготовления
Используются технологии
uCoz