Вывод подуровней меню (подменю)

#
Вывод подуровней меню (подменю)
Добрый день. В структуре сайта сделал пункты меню, у некоторых пунктов есть подпункты.
Пример:

Пункт 1
Пункт 2
Пункт 3
  -Подпункт 1
  -Подпункт 2
Пункт 4

Хочу сделать так, чтобы Подпункты выводились отдельно от меню. Например слева у меня всегда отражается меню первого уровня. Если я зашел на страничку, которая имеет подпункты (подразделы), то чтобы эти самые Подпункты отображались, например вверху на страничке, а на страницах, где нет Подпунктов чтобы соответственно ничего не выводилось, только основное меню слева.

Как реализовать нечто подобное? Спасибо.
#
Re: Вывод подуровней меню (подменю)
С этим разобрался, но не до конца.

Вот решение:
   <?php
   if (CURRENT_STRUCTURE_ID != 0)
   {
      $Structure = & singleton('Structure';
      $Structure->ShowStructure(2, 'ЛевоеМеню', array('parent_id' => CURRENT_STRUCTURE_ID), array('submenu' => 1));
   }
   ?>

Теперь вопрос такой: где расположить в xsl-шаблоне div, чтобы в нем оказалось подменю и уже с к ниму применить стили?
Модератор
#
Re: Вывод подуровней меню (подменю)
goldpiramida писал(а):
Теперь вопрос такой: где расположить в xsl-шаблоне div, чтобы в нем оказалось подменю и уже с к ниму применить стили?

Вложить в div вызов тэмпдэйте структуры для подуровней. Если не разберетесь - покажите Ваш XSL.
#
Re: Вывод подуровней меню (подменю)
Код XML-шаблона левое меню.


<?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">
      <!-- Выбираем узлы структуры первого уровня -->
      <xsl:apply-templates select="structure[show=1]"/>
      
      <!-- Если вывод подменю -->
      
      <xsl:if test="submenu/node() and count(structure[show=1]) > 0">
         
      </xsl:if>
      
   </xsl:template>
   
   <xsl:template match="structure">
      
      <!-- Запишем в константу ID структуры, данные для которой будут выводиться пользователю -->
      <xsl:variable name="current_structure_id" select="/document/structure/current_structure_id"/>
      
      <!-- Показывать ссылку, или нет -->
      <xsl:choose>
         <xsl:when 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>
            <!-- Ссылка на пункт меню -->
            <a href="{$link}" title="{name}">
               <!--
               Выделяем текущую страницу добавлением к <a> стиля font-weight: bold,
                  если это текущая страница, либо у нее есть ребенок с атрибутом id, равным текущей uheggt.
                  -->
                  <xsl:if test="current_structure_id = @id or count(.//structure[@id=$current_structure_id]) = 1">
                     <xsl:attribute name="style">font-weight: bold</xsl:attribute>
                  </xsl:if>
                  <xsl:value-of disable-output-escaping="yes" select="name"/>
               </a>
            </xsl:when>
            <!-- Если не показывать ссылку - выводим просто имя ссылки -->
            <xsl:otherwise>
               <xsl:value-of disable-output-escaping="yes" select="name"/>
            </xsl:otherwise>
         </xsl:choose>
         
      </xsl:template>
   </xsl:stylesheet>
#
Re: Вывод подуровней меню (подменю)
HostCMS писал(а):
Вложить в div вызов тэмпдэйте структуры для подуровней. Если не разберетесь — покажите Ваш XSL.


Так я пробовал. Вот этот кусок размещал в div'е:
<!-- Если вывод подменю -->
<xsl:if test="submenu/node() and count(structure[show=1]) > 0">
</xsl:if>


и аналогично непосредственно сам вывод в макете:

<?php
         $Structure = new Structure();
         $row_structure = $Structure->GetStructureItem(CURRENT_STRUCTURE_ID);
         $structure_parent_id = $row_structure['structure_parent_id'];
         $param['parent_id'] = CURRENT_STRUCTURE_ID;

         while ($structure_parent_id!=0)
         {
            $row_structure = $Structure->GetStructureItem($structure_parent_id);
            $structure_parent_id = $row_structure['structure_parent_id'];
         }

         $param['parent_id'] = $row_structure['structure_id'];
         $Structure->ShowStructure(2,'ЛевоеМеню',$param);
      ?>


Но немного не так. Мне надо, чтобы когда подразделов нет и div'a не было. А то он у меня другого цвета и тогда не красиво получается.
Модератор
#
Re: Вывод подуровней меню (подменю)
goldpiramida писал(а):
Мне надо, чтобы когда подразделов нет и div'a не было. А то он у меня другого цвета и тогда не красиво получается.

Вот и оберните div в Ваше условие:
<!-- Если вывод подменю -->
<xsl:if test="submenu/node() and count(structure[show=1]) > 0">
здесь div и в нем уже вызов structure[show=1]
</xsl:if>
#
Re: Вывод подуровней меню (подменю)
Добавляю div. А что именно писать в div'e. Подскажите пожалуйста.
<xsl:if test="submenu/node() and count(structure[show=1]) > 0">
     <div id="submenu_h"></div>
</xsl:if>

Как выглядит вызов?
Модератор
#
Re: Вывод подуровней меню (подменю)
goldpiramida,
<xsl:apply-templates select="structure[show=1]"/>
#
Re: Вывод подуровней меню (подменю)
Так ничего не получается:

Подменю в див не попадает и не выводиться вовсе. Основное меню также пропадает.

   <!-- ЛевоеМеню -->
  
   <xsl:template match="/document">
      <!-- Выбираем узлы структуры первого уровня -->
      
      <!-- Если вывод подменю -->
      
      <xsl:if test="submenu/node() and count(structure[show=1]) > 0">
         <xsl:apply-templates select="structure[show=1]"/>
      </xsl:if>
      
   </xsl:template>
Модератор
#
Re: Вывод подуровней меню (подменю)
goldpiramida,
и что Вы написали? Где вывод подменю? Где div?
Почему это условие добавлено не для подпунктов, а для меню первого уровня?
Авторизация