XSL шаблон для меню.

#
XSL шаблон для меню.
Есть шаблон (в самом конце сообщения показан), как мне ограничеть его рекурсивный вывод (включая группы инофрмационных систем), определенным уровнем. Т.е. допустим надо чтоб меню выводилось не глубже 3 уровня (суммарно, структура сайта + информационные системы).

Так же как правельно написать условию (зная ИД в структуре сайта, или "Название раздела (только латинские буквы и цифры)".


<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes" encoding="Windows-1251"/>

<xsl:template match="/document">
<ul>
   <!-- Выбираем все, у которых level = 0 и show = 1 -->
   <xsl:apply-templates select="structure[level=0 and show=1]"/>
</ul>
</xsl:template>

<xsl:template match="structure">
<li>
   <!-- Показывать ссылку, или нет -->
   <xsl:if test="show_link=1">

          <!-- Если внешняя ссылка - ставим внешнюю -->
          <xsl:if test="is_external_link=1">
            <a href="{external_link}"><xsl:value-of disable-output-escaping="yes" select="name"/></a>
          </xsl:if>

   <!-- Если внутренняя ссылка -->
   <xsl:if test="is_external_link=0">
      <a href="{link}">

      <!-- Запишем в константу ID структуры, данные для которой будут выводиться пользователю -->
      <xsl:variable name="current_structure_id" select="/document/structure/current_structure_id"/>

      <!-- Выделяем текущую страницу жирным (если это текущая страница, либо у нее есть ребенок с ID, равным текущей) -->
      <xsl:if test="current_structure_id=@id or count(.//structure[@id=$current_structure_id])=1">
         <b><xsl:value-of disable-output-escaping="yes" select="name"/></b>
      </xsl:if>

      <xsl:if test="not(current_structure_id=@id or count(.//structure[@id=$current_structure_id])=1)">
         <xsl:value-of disable-output-escaping="yes" select="name"/>
      </xsl:if>
            </a>
          </xsl:if>

       </xsl:if>

       <xsl:if test="show_link=0">
         <xsl:value-of disable-output-escaping="yes" select="name"/>
       </xsl:if>
<ul>
   <xsl:apply-templates select="structure"/>
</ul>
</li>
</xsl:template>

</xsl:stylesheet>
Модератор
#
Re: XSL шаблон для меню.
Властовский Владислав Олегович писал(а):
Есть шаблон (в самом конце сообщения показан), как мне ограничеть его рекурсивный вывод (включая группы инофрмационных систем), определенным уровнем. Т.е. допустим надо чтоб меню выводилось не глубже 3 уровня (суммарно, структура сайта + информационные системы).

Вам необходимо выводить только группы первого уровня?

Властовский Владислав Олегович писал(а):
Так же как правельно написать условию (зная ИД в структуре сайта, или "Название раздела (только латинские буквы и цифры)".

какое именно условие Вам необходимо написать, зная ID структуры или название раздела?
#
Re: XSL шаблон для меню.
Мне надо вывсети группые до 2 уровня (т.е. и первый и второй).

Мне условие надо написать, в этом же самом шиблоне (указанном выше), чтоб рекурсивный вывод (групп информационных) был только для однойго раздела структуры сайта.
#
Re: XSL шаблон для меню. Вопрос к HostCMS
Разбираюсь с построением шаблонов меню. Видимо это представляет определенную трудность для многих начинающих пользователей HostCMS. Не могли бы вы представить в качестве примера не общую структуру XML документа структуры сайта (как в документации), а конкретную, допустим центрального меню Демо-сайта. Это значительно бы упростило освоение XSLT.
yuritas
Модератор
#
Re: XSL шаблон для меню.
Властовский Владислав Олегович,

для подсчета текущего уровня вложенности в дереве (полезно, например, для получения уровня вложенности у structure) используйте
count(ancestor::имя узла)

например
count(ancestor::structure)


для вывода текущего уровня вложенности можно воспользоваться
<xsl:value-of select="count(ancestor::structure)"/>




Тарасов Юрий Иванович писал(а):
Разбираюсь с построением шаблонов меню. Видимо это представляет определенную трудность для многих начинающих пользователей HostCMS. Не могли бы вы представить в качестве примера не общую структуру XML документа структуры сайта (как в документации), а конкретную, допустим центрального меню Демо-сайта. Это значительно бы упростило освоение XSLT.

Вы можете просмотреть XML, введя /?show_xml=1 в адресную строку браузера
#
Re: XSL шаблон для меню.
Спасибо за ответ!
yuritas
Модератор
#
Re: XSL шаблон для меню.
пожалуйста
Авторизация