Меню с вложениями! И разными стилями для подкатегорий.

#
Меню с вложениями! И разными стилями для подкатегорий.
Хотелось бы понять как сделать вот такое:

Раздел(стиль X1)
-Подраздел1 (стиль X2)
-Подраздел1 (стиль X2)
-Подраздел1 (стиль X2)
Раздел2(стиль X1)
-Подраздел2 (стиль X2)
-Подраздел2 (стиль X2)
-Подраздел2 (стиль X2)


На форуме прочел уже кучу вариантов, не один не подходит, так как не могу задать стиль для подкатегории.

ЕСЛИ кто делал такое пожалуйста скиньте XLS шаблон.
#
Re: Меню с вложениями! И разными стилями для подкатегорий.
Да сейчас пытаюсь лопатить вот этот шаблон, все хорошо, но одна проблема не могу задать для подкатегории другой стиль, хоть ты тресни... помогите пожалуйста разобраться.

<?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 xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
encoding="Windows-1251" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml" />

<xsl:template match="/document">

  <div>
     <!-- Выбираем узлы структуры -->
     <xsl:apply-templates select="structure[show=1]"/>
  </div>
</xsl:template>

<xsl:template match="structure">
  <!-- Запишем в константу ID структуры, данные для которой будут выводиться пользователю -->
  <xsl:variable name="current_structure_id" select="/document/structure/current_structure_id"/>
<li>
    <!-- Расчитываем размер отступа -->
  <xsl:variable name="padding" select="level * 10" />
       <!-- Показывать ссылку, или нет -->
     <xsl:if test="show_link = 1">
             <!-- Определяем адрес ссылки -->
        <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}"><font color="#942121"><xsl:value-of disable-output-escaping="yes" select="name"/></font></a></xsl:when>
           <!-- Иначе обычный вывод с пустым стилем -->
           <xsl:otherwise>
                                 <a href="{$link}"><xsl:value-of disable-output-escaping="yes" select="name"/></a>
                                            </xsl:otherwise>
        </xsl:choose>
             </xsl:if>
          <!-- Если не показывать ссылку - выводим просто имя ссылки -->
     <xsl:if test="show_link=0">
        <xsl:value-of disable-output-escaping="yes" select="name"/>
     </xsl:if>
</li>

<xsl:if test="current_structure_id=@id or count(.//structure[@id=$current_structure_id])=1">
  <!-- Выбираем подузлы структуры -->
  <xsl:if test="count(structure[show=1]) > 0">
  <ul>
     <!-- Выбираем узлы структуры -->
     <xsl:apply-templates select="structure[show=1]"/>
       </ul>
</xsl:if>
</xsl:if>

</xsl:template>
</xsl:stylesheet>
Модератор
#
Re: Меню с вложениями! И разными стилями для подкатегорий.
Начнем с полезных ссылок на XSL:
http://www.hostcms.ru/forums/22/111/
Здесь мы узнаем, как получить уровень вложенности:
<xsl:value-of select="count(ancestor::structure)"/>


В результате получается примерно такой код (писал по памяти, могут быть опечатки):
<?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 xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
      encoding="Windows-1251" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml" />
      
      <xsl:template match="/document">
         
         <div>
            <!-- Выбираем узлы структуры -->
            <xsl:apply-templates select="structure[show=1]"/>
         </div>
      </xsl:template>
      
      <xsl:template match="structure">
         <!-- Запишем в константу ID структуры, данные для которой будут выводиться пользователю -->
         <xsl:variable name="current_structure_id" select="/document/structure/current_structure_id"/>
         <li>
            <!-- Расчитываем размер отступа -->
            <xsl:variable name="padding" select="level * 10" />
            <!-- Показывать ссылку, или нет -->
            <xsl:if test="show_link = 1">
               <!-- Определяем адрес ссылки -->
               <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="class_name"><xsl:choose>
            <xsl:when test="count(ancestor::structure) = 1">class_x</xsl:when>
            <xsl:when test="count(ancestor::structure) = 2">class_y</xsl:when>
            <xsl:when test="count(ancestor::structure) = 3">class_z</xsl:when>
            <!-- Иначе класс class_other -->
            <xsl:otherwise>class_other</xsl:otherwise>
         </xsl:choose></xsl:variable>
      
      <a href="{$link}" class="{$class_name}"><xsl:value-of disable-output-escaping="yes" select="name"/></a>
      

   </xsl:if>
   <!-- Если не показывать ссылку - выводим просто имя ссылки -->
   <xsl:if test="show_link=0">
      <xsl:value-of disable-output-escaping="yes" select="name"/>
   </xsl:if>
</li>

<xsl:if test="current_structure_id=@id or count(.//structure[@id=$current_structure_id])=1">
   <!-- Выбираем подузлы структуры -->
   <xsl:if test="count(structure[show=1]) > 0">
      <ul>
         <!-- Выбираем узлы структуры -->
         <xsl:apply-templates select="structure[show=1]"/>
      </ul>
   </xsl:if>
</xsl:if>

</xsl:template>
</xsl:stylesheet>
#
Re: Меню с вложениями! И разными стилями для подкатегорий.
спасибо большое
Модератор
#
Re: Меню с вложениями! И разными стилями для подкатегорий.
пожалуйста
#
Re: Меню с вложениями! И разными стилями для подкатегорий.
Теперь другая проблема((( выделеный раздел, то есть то в котором я нахожусь не выделяется(((((

Это реально изменить?
Модератор
#
Re: Меню с вложениями! И разными стилями для подкатегорий.
Абсолютно реально.
<?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 xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
      encoding="Windows-1251" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml" />
      
      <xsl:template match="/document">
         
         <div>
            <!-- Выбираем узлы структуры -->
            <xsl:apply-templates select="structure[show=1]"/>
         </div>
      </xsl:template>
      
      <xsl:template match="structure">
         <!-- Запишем в константу ID структуры, данные для которой будут выводиться пользователю -->
         <xsl:variable name="current_structure_id" select="/document/structure/current_structure_id"/>
         <li>
            <!-- Расчитываем размер отступа -->
            <xsl:variable name="padding" select="level * 10" />
            <!-- Показывать ссылку, или нет -->
            <xsl:if test="show_link = 1">
               <!-- Определяем адрес ссылки -->
               <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="class_name"><xsl:choose>
         <xsl:when test="count(ancestor::structure) = 1">class_x</xsl:when>
         <xsl:when test="count(ancestor::structure) = 2">class_y</xsl:when>
         <xsl:when test="count(ancestor::structure) = 3">class_z</xsl:when>
            <!-- Иначе класс class_other -->
         <xsl:otherwise>class_other</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>
         
      <a href="{$link}" class="{$class_name}" style="{$link_style}"><xsl:value-of disable-output-escaping="yes" select="name"/></a>
      

   </xsl:if>
   <!-- Если не показывать ссылку - выводим просто имя ссылки -->
   <xsl:if test="show_link=0">
      <xsl:value-of disable-output-escaping="yes" select="name"/>
   </xsl:if>
</li>

<xsl:if test="current_structure_id=@id or count(.//structure[@id=$current_structure_id])=1">
   <!-- Выбираем подузлы структуры -->
   <xsl:if test="count(structure[show=1]) > 0">
      <ul>
         <!-- Выбираем узлы структуры -->
         <xsl:apply-templates select="structure[show=1]"/>
      </ul>
   </xsl:if>
</xsl:if>

</xsl:template>
</xsl:stylesheet>
#
Re: Меню с вложениями! И разными стилями для подкатегорий.
В рот мне ноги...в рот мне ноги ))))))
Большое спасибо)))))


Немного исправил:

<a href="{$link}" class="{$class_name}" style="{link_style}"><xsl:value-of disable-output-escaping="yes" select="name"/></a>


<a href="{$link}" class="{$class_name}" style="{$link_style}"><xsl:value-of disable-output-escaping="yes" select="name"/></a>
#
Re: Меню с вложениями! И разными стилями для подкатегорий.
Есть еще такой вопрос:
Вывод меню из инфо системы, то есть таким образом я вызываю меню узла структуры, а как вызывать меню из определенной инфо-системы, не понял....
Модератор
#
Re: Меню с вложениями! И разными стилями для подкатегорий.
ipsus,
дважды прочитал вопрос, ничего не понял.
Авторизация