Вывод в меню структуры второго уровня.

#
Re: Вывод в меню структуры второго уровня.
Пока куда не пробовал, везде ошибки выдает.
Модератор
#
Re: Вывод в меню структуры второго уровня.
а текст ошибки? Надо в <xsl:choose> все это обернуть
#
Re: Вывод в меню структуры второго уровня.
В общем, на данный момент у меня получается вот что:
Когда я вставляю такой код сразу после <li>:
         <xsl:choose>      
              <xsl:when test="count(structure[show=1]) > 0">
              <xsl:value-of disable-output-escaping="yes" select="name"/>
         </xsl:when>
              </xsl:choose>   

То в меню появляются дублирующие разделы, и они такие как надо, без ссылок, но ниже их остаются еще и прежние разделы со ссылками. И еще у тех новых разделов (которые как надо) исчезают стили, то есть они выводятся просто черными буквами.
Модератор
#
Re: Вывод в меню структуры второго уровня.
raisckiy,
давайте не будет гадать, покажите целиком шаблон
#
Re: Вывод в меню структуры второго уровня.
Ок, со стилями я разобрался вроде, осталось понять что нужно сделать, чтобы пропали дублирующие разделы.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0"
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
   xmlns:hostcms="http://www.hostcms.ru/"
   exclude-result-prefixes="hostcms">
   <xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
      encoding="UTF-8" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
   
   <xsl:template match="/site">
      
      <ul class="menu_m">
         <!-- Выбираем узлы структуры -->
         <xsl:apply-templates select="structure[show=1]"/>
                </ul>
    
   </xsl:template>
   
   
   <!-- Запишем в константу ID структуры, данные для которой будут выводиться пользователю -->
   <xsl:variable name="current_structure_id" select="/site/current_structure_id"/>
   <xsl:template match="structure">

        <li>

   <xsl:choose>      
              <xsl:when test="count(structure[show=1]) > 0">
              <xsl:value-of disable-output-escaping="yes" select="name"/>
         </xsl:when>
         </xsl:choose>


         <!--
         Выделяем текущую страницу добавлением к li класса current,
         если это текущая страница, либо у нее есть ребенок с атрибутом id, равным текущей группе.
         -->
         <xsl:if test="$current_structure_id = @id or count(.//structure[@id=$current_structure_id]) = 1">
            <xsl:attribute name="class">current</xsl:attribute>
         </xsl:if>
         
         <xsl:if test="position() = last()">
            <xsl:attribute name="style">background-image: none</xsl:attribute>
         </xsl:if>
         
         <!-- Определяем адрес ссылки -->
         <xsl:variable name="link"><xsl:choose>
               <!-- Если внешняя ссылка -->
               <xsl:when test="is_external_link=1"><xsl:value-of disable-output-escaping="yes" select="external_link"/></xsl:when>
               <!-- Иначе если внутренняя ссылка -->
               <xsl:otherwise><xsl:value-of disable-output-escaping="yes" select="link"/></xsl:otherwise>
         </xsl:choose></xsl:variable>
         <!-- Определяем стиль вывода ссылки -->
         <xsl:variable name="link_style"><xsl:choose>
               <!-- Выделяем текущую страницу жирным (если это текущая страница, либо у нее есть ребенок с ID, равным текущей) -->
               <xsl:when test="current_structure_id=@id or count(.//structure[@id=$current_structure_id])=1">font-weight: bold</xsl:when>
               <!-- Иначе обычный вывод с пустым стилем -->
               <xsl:otherwise></xsl:otherwise>
         </xsl:choose></xsl:variable>
         <xsl:choose>
            <!-- Выделяем текущую страницу жирным (если это текущая страница, либо у нее есть ребенок с ID, равным текущей) -->
            <xsl:when test="current_structure_id=@id or count(.//structure[@id=$current_structure_id])=1">
            <a href="{$link}"><xsl:value-of disable-output-escaping="yes" select="name"/></a></xsl:when>
            <!-- Иначе обычный вывод с пустым стилем -->
            <xsl:otherwise>
               <a href="{$link}"><xsl:value-of disable-output-escaping="yes" select="name"/></a>
            </xsl:otherwise>
         </xsl:choose>

         
         <xsl:choose>      
         <xsl:when test="count(structure[show=1])">
           <xsl:value-of disable-output-escaping="yes" select="name"/>
         </xsl:when>
         <xsl:otherwise>
            <a href="{$link}"><xsl:value-of disable-output-escaping="yes" select="name"/></a>
         </xsl:otherwise>
         </xsl:choose>

         
         <!-- Если не показывать ссылку - выводим просто имя ссылки -->
         <xsl:if test="show_link=0">
            <xsl:value-of disable-output-escaping="yes" select="name"/>
         </xsl:if>
         
         
         
         <!-- Выбираем подузлы структуры -->
         <xsl:if test="count(structure[show=1]) > 0">
            <ul>
               <!-- Выбираем узлы структуры -->
               <xsl:apply-templates select="structure[show=1]"/>
            </ul>
         
                        </xsl:if>
                        </li>
   </xsl:template>
</xsl:stylesheet>
Модератор
#
Re: Вывод в меню структуры второго уровня.
Внес изменения в Ваш код
#
Re: Вывод в меню структуры второго уровня.
Ура, работает. Огромное спасибо Вам за помощь и терпение! Сам бы не догадался.
Модератор
#
Re: Вывод в меню структуры второго уровня.
Пожалуйста.
#
Re: Вывод в меню структуры второго уровня.
Здравствуйте. Как правильно написать чтобы для current ссылки добавлялся класс(так же как и к li)?
#
Re: Вывод в меню структуры второго уровня.
сделал выпадающее меню по аналогии, подразделы из структуры сайта показываются. А вот как вывести в подменю ещё и подразделы из инфосистемы? например у вас на демо сайте: раздел Услуги (demo.hostcms.ru/services/) есть четыре подраздела, а как вывести их в подменю?
Авторизация