Древовидный вывод меню магазина

Модератор
#
Re: Древовидный вывод меню магазина
compaq,
Прочему Вы не попробовали сами разобраться и показать, что у Вас получилось?

Имеем HTML:
<ul id="my-menu" class="sample-menu">
   <li><a href="#0">Рибы (название магазина, корневые товары)</a>

      <ul><li><a href="#0">Риб 01</a></li>
         <li><a href="#0">Риб 02</a></li>
         <li><a href="#0">Риб 03</a></li>
                  <li><a href="#0">Риб 04</a></li>
      </ul></li>
   <li><a href="#0">Надувные модульные сооружения(группы товаров)</a>

   <ul><li><a href="#0">Палатки</a></li>
   <li><a href="#0">Боксы для техники</a></li>
   <li><a href="#0">Ангары</a></li>
  </ul>
  </li>
      <li><a href="#0">Пневмо-надувные конструкции(группы товаров)</a>
      <ul>

         <li><a href="#0">Боновые заграждения</a></li>
         <li><a href="#0">Мягкие емкости для хранения технических жидкостей</a></li>
      </ul>
    </li>
            <li><a href="#0">Средства спасения и эвакуации(группы товаров)</a>
            <ul><li><a href="#0">Плоты</a></li>
   <li><a href="#0">Надувные трапы</a></li>

   <li><a href="#0">Надувные спасательные жилеты</a></li>
  </ul>
        </li>
      </ul>


На сколько я понимаю, нужно для UL верхнего уровня прописать
id="my-menu" class="sample-menu"

Я правильно понимаю?
#
Re: Древовидный вывод меню магазина
да, для работы нужно указать только id и  сlass у верхнего (главного если быть точней) UL

я пробывал, даю как раз id и class у UL но не вижу результата.


_winboat.ru - слева находится вот над чем сижу =)
ку
#
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">
      
      <ul class="sample-menu" id="my-menu">
         <!-- Выбираем узлы структуры -->
         <xsl:apply-templates select="structure[show=1]"/>
      </ul>
   </xsl:template>
   
   <xsl:template match="structure">
      <li>
         <!-- Запишем в константу ID структуры, данные для которой будут выводиться пользователю -->
         
     <xsl:variable name="current_structure_id" select="/document/structure/current_structure_id"/>
         
         <!-- Расчитываем размер отступа -->
         <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>
            
            <a href="{$link}">
               <span style="{$link_style}">
                  <xsl:value-of disable-output-escaping="yes" select="name"/>
               </span>
            </a>
         </xsl:if>
         
         <!-- Если не показывать ссылку - выводим просто имя ссылки -->
         <xsl:if test="show_link=0">
            <!-- <img border="0" src="/images/menu_point.gif" class="menu_point" width="4" height="7" /> -->
            <xsl:value-of disable-output-escaping="yes" select="name"/>
         </xsl:if>
         
         
         <!-- ЕСЛИ ДОШЛИ ДО СЕРЕДИНЫ СПИСКА -->
         
         <!-- Если не надо разравать колонку на вторых уровнях, то указать: -->
         <!-- <xsl:if test="position() = round(count(/document/structure) div 2)"> -->
            <!--
            <xsl:if test="level = 0 and position() = round(count(/document//structure) div 2)">
               <xsl:text disable-output-escaping="yes">
                  &lt;/td&gt;
                  &lt;td valign="top" style="padding-left: 20px"&gt;
               </xsl:text>
            </xsl:if>
            -->

    <!-- Выбираем подузлы структуры -->
            <xsl:if test="count(structure[show=1]) &gt; 0">

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

            </xsl:if>
         </li>
      </xsl:template>
   </xsl:stylesheet>
ку
Модератор
#
Re: Древовидный вывод меню магазина
compaq,
у Вас слева и выводится
<ul class="sample-menu" id="my-menu">
   <li><a href="/product/price/"><span style="">Прайс-лист</span></a></li>
   <li><a href="/product/naduvnye-modulnye-sooruzhenija/"><span style="">Надувные
   модульные сооружения</span></a>
   
   
   <li><a href="/product/naduvnye-modulnye-sooruzhenija/palatki/"><span
      style="">Палатки</span></a></li>
   <li><a
      href="/product/naduvnye-modulnye-sooruzhenija/boksy-dlja-tekhniki/"><span
      style="">Боксы для техники</span></a></li>
   <li><a href="/product/naduvnye-modulnye-sooruzhenija/angary/"><span
      style="">Ангары</span></a></li>
   </li>
   <li><a href="/product/pnevmo-naduvnye-konstruktsii/"><span style="">Пневмо-надувные
   конструкции</span></a>
   
   
   <li><a href="/product/pnevmo-naduvnye-konstruktsii/palatki/"><span
      style="">Боновые заграждения</span></a></li>
   <li><a
      href="/product/pnevmo-naduvnye-konstruktsii/mjagkie-emkosti-dlja-khranenija-tekhnicheskikh-zhidkostejj/"><span
      style="">Мягкие емкости для хранения технических жидкостей</span></a></li>
   </li>
   <li><a href="/product/sredstva-spasenija-i-evakuatsii/"><span style="">Средства
   спасения и эвакуации</span></a>
   
   
   <li><a href="/product/sredstva-spasenija-i-evakuatsii/ploty/"><span
      style="">Плоты</span></a></li>
   <li><a href="/product/sredstva-spasenija-i-evakuatsii/naduvnye-trapy/"><span
      style="">Надувные трапы</span></a></li>
   <li><a
      href="/product/sredstva-spasenija-i-evakuatsii/naduvnye-spasatelnye-zhilety/"><span
      style="">Надувные спасательные жилеты</span></a></li>
   </li>
   <li><a href="/product/winboat-r280/"><span style="">WINboat 280R</span></a></li>
   <li><a href="/product/winboat-r360/"><span style="">WINboat 360R</span></a></li>
   <li><a href="/product/winboat-r360-c/"><span style="">WINboat 360RC
   (складной РИБ!)</span></a></li>
   <li><a href="/product/winboat-r4/"><span style="">WINboat R4</span></a></li>
   <li><a href="/product/winboat-r4-d/"><span style="">WINboat R4D</span></a></li>
   <li><a href="/product/winboat-r5/"><span style="">WINboat R5</span></a></li>
   <li><a href="/product/winboat-r5-t/"><span style="">WINboat R5Pro</span></a></li>
   <li><a href="/product/winboat-r5-lux/"><span style="">WINboat 500R</span></a></li>
</ul>


я не вижу ни одного вложенного <ul>
Модератор
#
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">
      
      <ul class="sample-menu" id="my-menu">
         <!-- Выбираем узлы структуры -->
         <xsl:apply-templates select="structure[show=1]"/>
      </ul>
   </xsl:template>
  
   <xsl:template match="structure">
      <li>
         <!-- Запишем в константу ID структуры, данные для которой будут выводиться пользователю -->
        
     <xsl:variable name="current_structure_id" select="/document/structure/current_structure_id"/>
        
         <!-- Расчитываем размер отступа -->
         <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>
            
            <a href="{$link}">
               <span style="{$link_style}">
                  <xsl:value-of disable-output-escaping="yes" select="name"/>
               </span>
            </a>
         </xsl:if>
        
         <!-- Если не показывать ссылку - выводим просто имя ссылки -->
         <xsl:if test="show_link=0">
            <!-- <img border="0" src="/images/menu_point.gif" class="menu_point" width="4" height="7" /> -->
            <xsl:value-of disable-output-escaping="yes" select="name"/>
         </xsl:if>
        
        
         <!-- ЕСЛИ ДОШЛИ ДО СЕРЕДИНЫ СПИСКА -->
        
         <!-- Если не надо разравать колонку на вторых уровнях, то указать: -->
         <!-- <xsl:if test="position() = round(count(/document/structure) div 2)"> -->
            <!--
            <xsl:if test="level = 0 and position() = round(count(/document//structure) div 2)">
               <xsl:text disable-output-escaping="yes">
                  &lt;/td&gt;
                  &lt;td valign="top" style="padding-left: 20px"&gt;
               </xsl:text>
            </xsl:if>
            -->

    <!-- Выбираем подузлы структуры -->
            <xsl:if test="count(structure[show=1]) &gt; 0">
                  <ul>
                  <!-- Выбираем узлы структуры -->
                  <xsl:apply-templates select="structure[show=1]"/>
                  </ul>
            </xsl:if>
         </li>
      </xsl:template>
   </xsl:stylesheet>
#
Re: Древовидный вывод меню магазина
спасибо вам, вот теперь ясно! запутался окончательно  

natalya писал(а):
compaq писал (а):но беспорядок остается — сортировку элементов можно задавать непосредственно в XSL-шаблоне. См. описание элемента xsl:sort.


Наталья писала про сортировку, задача в этом получившемся меню в начала отобразить товары которые в корне - они сейчас в конце. Получиться это реализовать?

Так же как и

natalya писал(а):
compaq писал (а):ненужные элементы — уберите для «ненужных» узлов галочку «Отображать в меню сайта» при их редактировании. Если нужно, чтобы в другом меню эти узлы все-таки отображались, то ограничить их можно с помощью доп. свойств узлов, например.


Прайс в данном случае выводить не нужно и канечно хочется его убрать.


по второму моменту не понял, в каком направлении двигатьcя?
ку
Авторизация