Меню из структуры сайта

#
Меню из структуры сайта
Здравствуйте!
Есть XSL-шаблон меню сайта
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <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="/document">
      <div class="blue demo-container">
         <ul class="accordion"  id="accordion-3">
            <xsl:apply-templates select="structure[show=1]"/>
         </ul>
      </div>
   </xsl:template>
   
   <xsl:template match="structure">
      <xsl:variable name="current_structure_id" select="/document/structure/current_structure_id"/>
      <li class="dcjq-parent-li">
         <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>
         
         
         <a href="{$link}" class="dcjq-parent" title="{name}"><xsl:value-of disable-output-escaping="yes" select="name"/></a>
         
         <xsl:if test="count(structure[show = 1]) &gt; 0">
            
            <ul>
               <xsl:apply-templates select="structure[show=1]" mode="pool"/>
            </ul>
            
         </xsl:if>
      </li>
   </xsl:template>
   
   <xsl:template match="structure" mode="pool">
      <li>
<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>
         <a href="{$link}"><xsl:value-of disable-output-escaping="yes" select="name"/></a>
      </li>
   </xsl:template>
</xsl:stylesheet>

как сделать так, что бы если у узла структуры есть вложенные структуры то пункт меню не выводился ссылкой, например так

п1 не ссылка, простой текст
п.п.1 ссылка
п.п.2 ссылка
п.2 ссылка
п.3 ссылка
Модератор
#
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">
   <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="/document">
      <div class="blue demo-container">
         <ul class="accordion"  id="accordion-3">
            <xsl:apply-templates select="structure[show=1]"/>
         </ul>
      </div>
   </xsl:template>
  
   <xsl:template match="structure">
      <xsl:variable name="current_structure_id" select="/document/structure/current_structure_id"/>
      <li class="dcjq-parent-li">
         <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:choose>
         <xsl:when test="count(structure[show = 1]) &gt; 0">
            <a href="{$link}" class="dcjq-parent" title="{name}"><xsl:value-of disable-output-escaping="yes" select="name"/></a>        
         
            <ul>
               <xsl:apply-templates select="structure[show=1]" mode="pool"/>
            </ul>          
         </xsl:when>
       <xsl:otherwise>
            <xsl:value-of disable-output-escaping="yes" select="name"/>
      </xsl:otherwise>
      <xsl:choose>
      
      </li>
   </xsl:template>
  
   <xsl:template match="structure" mode="pool">
      <li>
<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>
         <a href="{$link}"><xsl:value-of disable-output-escaping="yes" select="name"/></a>
      </li>
   </xsl:template>
</xsl:stylesheet>
Вы только что начали читать предложение, чтение которого вы уже заканчиваете.
#
Re: Меню из структуры сайта
Спасибо! там в choose закрывающего слеша не хватало
Вот если кому надо работающий код
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <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="/document">
      <div class="blue demo-container">
         <ul class="accordion"  id="accordion-3">
            <xsl:apply-templates select="structure[show=1]"/>
         </ul>
      </div>
   </xsl:template>
  
   <xsl:template match="structure">
      <xsl:variable name="current_structure_id" select="/document/structure/current_structure_id"/>
      <li class="dcjq-parent-li">
         <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:choose>
         <xsl:when test="count(structure[show = 1]) &gt; 0">
            <a href="{$link}" class="dcjq-parent" title="{name}"><xsl:value-of disable-output-escaping="yes" select="name"/></a>        
        
            <ul>
               <xsl:apply-templates select="structure[show=1]" mode="pool"/>
            </ul>          
         </xsl:when>
       <xsl:otherwise>
            <xsl:value-of disable-output-escaping="yes" select="name"/>
      </xsl:otherwise>
      </xsl:choose>
      
      </li>
   </xsl:template>
  
   <xsl:template match="structure" mode="pool">
      <li>
<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>
         <a href="{$link}"><xsl:value-of disable-output-escaping="yes" select="name"/></a>
      </li>
   </xsl:template>
</xsl:stylesheet>
#
Re: Меню из структуры сайта
Хочу сделать что бы в зависимости от условия активности группы и наличия у нее подгруппы подставлялось id в тег ul
сейчас имею вот такой код работает только первое условие, т.е. ul всегда без id
   <xsl:template match="/document">
      <xsl:variable name="current_structure_id" select="/document/structure/current_structure_id"/>
      <div class="blue demo-container">
         <xsl:choose>
<-- проверяем если группа текущая и у нее есть подгруппа -->
            <xsl:when test="(current_structure_id = @id or count(.//structure[@id=$current_structure_id]) = 1) and count(structure[show = 1]) &gt; 0">
               <ul class="accordion" >
                  <xsl:apply-templates select="structure[show=1]"/>
               </ul>
            </xsl:when>
            <xsl:otherwise>
               <ul class="accordion" id="accordion-3">
                  <xsl:apply-templates select="structure[show=1]"/>
               </ul>
            </xsl:otherwise>
         </xsl:choose>
      </div>
   </xsl:template>
Авторизация