Вывод подменю в отдельный блок макета

#
Re: Вывод подменю в отдельный блок макета
mister.tuk, в таком случае вызов показа подменю(в отдельном блоке макета) в вашем случае упрощается до кода:
<?
$Structure = new Structure();
$param = array();
$param['parent_id'] = CURRENT_STRUCTURE_ID;
$Structure->ShowStructure(1,'MainMenu',$param);
?>
#
Re: Вывод подменю в отдельный блок макета
добрый день,

снова по подменю (приведу в качестве примера тестовый сайт), выглядит это так: http://test.stremlenie.ru/

для вывода верхнего меню и нижнего подменю пункта "Обучение" использовал следующие код:

<?php
$Structure = & singleton('Structure');
$Structure->ShowStructure(4,'ВерхнееМенюОбучение');
?>
<?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 (4,'ВерхнееМенюОбучение',$param) ;
?>


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

ХСЛ меню:
<?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 id="TopMenu">
         <ul id="Navigation">
            <!-- Выбираем узлы структуры -->
            <xsl:apply-templates select="structure[show=1]"/>
         </ul>
      </div>
   </xsl:template>
   
   <xsl:template match="structure">
      
      <!-- Запишем в константу ID структуры, данные для которой будут выводиться пользователю -->
      <xsl:variable name="current_structure_id" select="/document/structure/current_structure_id"/>
      
      
      <li class="item_menu_div" id="menu_id_{@id}" onmouseover="MenuOver('menu_id_{@id}', 'child_menu_id_{@id}');" onmouseout="MenuOut('menu_id_{@id}', 'child_menu_id_{@id}');">
         
         <!-- Показывать ссылку, или нет -->
         <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>
               <xsl:when test="$current_structure_id=@id">
               <a href="{$link}" id="current_menu_id_{@id}"><span style="{$link_style}"><xsl:value-of disable-output-escaping="yes" select="name"/></span></a>
               </xsl:when>
               <!-- Иначе обычный вывод с пустым стилем -->
               <xsl:otherwise>
               <a href="{$link}"><span style="{$link_style}"><xsl:value-of disable-output-escaping="yes" select="name"/></span></a>
               </xsl:otherwise>
            </xsl:choose>
         </xsl:if>
         
         <!-- Выводим подуровни меню -->
         <xsl:if test="count(structure[show = 1]) &gt; 0">
            <ul id="child_menu_id_{@id}" class="poll_down_menu_lev_1" align="left">
               
               
               <xsl:apply-templates select="structure[show=1]" mode="pool"/>
            </ul>
            
         </xsl:if>
         
         <!-- Если не показывать ссылку - выводим просто имя ссылки -->
         <xsl:if test="show_link=0">
            <xsl:value-of disable-output-escaping="yes" select="name"/>
         </xsl:if>
         
      </li>
   </xsl:template>
   
   <xsl:template match="structure" mode="pool">
      <li class="item_menu_div" id="menu_id_{@id}" onmouseover="MenuOver('menu_id_{@id}', 'child_menu_id_{@id}');" onmouseout="MenuOut('menu_id_{@id}', 'child_menu_id_{@id}');">
         <!-- Показывать ссылку, или нет -->
         <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>
            
            <a href="{$link}"><span>
                  <xsl:value-of disable-output-escaping="yes" select="name"/>
            </span></a>
         </xsl:if>
         
         <!-- Если не показывать ссылку - выводим просто имя ссылки -->
         <xsl:if test="show_link=0">
            <xsl:value-of disable-output-escaping="yes" select="name"/>
         </xsl:if>
      </li>
   </xsl:template>
</xsl:stylesheet>


ХМЛ:



<?xml version="1.0" encoding="windows-1251"?>
<document>
<site site_id="1">
<site_name>Stremlenie</site_name>
<site_coding>windows-1251</site_coding>
<site_locale>ru_RU.CP1251</site_locale>
<site_chmod>0777</site_chmod>
<site_files_chmod>0777</site_files_chmod>
<site_date_format>%d.%m.%Y</site_date_format>
<site_date_time_format>%d.%m.%Y %H:%M:%S</site_date_time_format>
<site_html_cache_clear_probability>10000</site_html_cache_clear_probability>
<alias alias_id="2" alias_current="0">
<alias_name>hostcms5</alias_name>
</alias>
<alias alias_id="3" alias_current="1">
<alias_name>test.stremlenie.ru</alias_name>
</alias>
</site>
<structure id="7" menu_id="4">
<current_structure_id>1</current_structure_id>
<name>Обучение</name>
<show>1</show>
<show_link>1</show_link>
<level>0</level>
<id_parent>0</id_parent>
<is_external_link>0</is_external_link>
<external_link></external_link>
<link>/news/</link>
<structure_change_frequency>2</structure_change_frequency>
<structure_priority>0.5</structure_priority>
<structure id="83" menu_id="4">
<current_structure_id>1</current_structure_id>
<name>Пробный урок</name>
<show>1</show>
<show_link>1</show_link>
<level>1</level>
<id_parent>7</id_parent>
<is_external_link>0</is_external_link>
<external_link></external_link>
<link>/news/testlesson/</link>
<structure_change_frequency>0</structure_change_frequency>
<structure_priority>0.5</structure_priority>
<propertys>
</propertys>
</structure>
<structure id="84" menu_id="4">
<current_structure_id>1</current_structure_id>
<name>Структура урока</name>
<show>1</show>
<show_link>1</show_link>
<level>1</level>
<id_parent>7</id_parent>
<is_external_link>0</is_external_link>
<external_link></external_link>
<link>/news/leson_structure/</link>
<structure_change_frequency>0</structure_change_frequency>
<structure_priority>0.5</structure_priority>
<propertys>
</propertys>
</structure>
<structure id="85" menu_id="4">
<current_structure_id>1</current_structure_id>
<name>Рекомендации</name>
<show>1</show>
<show_link>1</show_link>
<level>1</level>
<id_parent>7</id_parent>
<is_external_link>0</is_external_link>
<external_link></external_link>
<link>/news/recomendations/</link>
<structure_change_frequency>0</structure_change_frequency>
<structure_priority>0.5</structure_priority>
<propertys>
</propertys>
</structure>
<structure id="86" menu_id="4">
<current_structure_id>1</current_structure_id>
<name>Правила</name>
<show>1</show>
<show_link>1</show_link>
<level>1</level>
<id_parent>7</id_parent>
<is_external_link>0</is_external_link>
<external_link></external_link>
<link>/news/rules/</link>
<structure_change_frequency>0</structure_change_frequency>
<structure_priority>0.5</structure_priority>
<propertys>
</propertys>
</structure>
<structure id="87" menu_id="4">
<current_structure_id>1</current_structure_id>
<name>Курсы</name>
<show>1</show>
<show_link>1</show_link>
<level>1</level>
<id_parent>7</id_parent>
<is_external_link>0</is_external_link>
<external_link></external_link>
<link>/news/courses/</link>
<structure_change_frequency>0</structure_change_frequency>
<structure_priority>0.5</structure_priority>
<structure id="91" menu_id="4">
<current_structure_id>1</current_structure_id>
<name>Импровизация для танцпола</name>
<show>0</show>
<show_link>1</show_link>
<level>2</level>
<id_parent>87</id_parent>
<is_external_link>0</is_external_link>
<external_link></external_link>
<link>/news/courses/improvizatsija-dlja-tantspola/</link>
<structure_change_frequency>0</structure_change_frequency>
<structure_priority>0.5</structure_priority>
<propertys>
</propertys>
</structure>
<structure id="96" menu_id="4">
<current_structure_id>1</current_structure_id>
<name>Клубные танцы</name>
<show>0</show>
<show_link>1</show_link>
<level>2</level>
<id_parent>87</id_parent>
<is_external_link>0</is_external_link>
<external_link></external_link>
<link>/news/courses/klubnye-tantsy/</link>
<structure_change_frequency>0</structure_change_frequency>
<structure_priority>0.5</structure_priority>
<propertys>
<property type="InformationSystemItem" id="53" name="inf_sys_test1">
<property_name>inf_sys_test1</property_name>
<order>40</order>
</property>
</propertys>
</structure>
<structure id="95" menu_id="4">
<current_structure_id>1</current_structure_id>
<name>Клубный танец + стрип пластика</name>
<show>0</show>
<show_link>1</show_link>
<level>2</level>
<id_parent>87</id_parent>
<is_external_link>0</is_external_link>
<external_link></external_link>
<link>/news/courses/klubnyjj-tanets--strip-plastika/</link>
<structure_change_frequency>0</structure_change_frequency>
<structure_priority>0.5</structure_priority>
<propertys>
</propertys>
</structure>
<structure id="92" menu_id="4">
<current_structure_id>1</current_structure_id>
<name>Клубный танец в стиле R&amp;B</name>
<show>0</show>
<show_link>1</show_link>
<level>2</level>
<id_parent>87</id_parent>
<is_external_link>0</is_external_link>
<external_link></external_link>
<link>/news/courses/klubnyjj-tanets-v-stile-rb/</link>
<structure_change_frequency>0</structure_change_frequency>
<structure_priority>0.5</structure_priority>
<propertys>
</propertys>
</structure>
<structure id="93" menu_id="4">
<current_structure_id>1</current_structure_id>
<name>Особенности современной хореографии для сцены и танцпола</name>
<show>0</show>
<show_link>1</show_link>
<level>2</level>
<id_parent>87</id_parent>
<is_external_link>0</is_external_link>
<external_link></external_link>
<link>/news/courses/osobennosti-sovremennojj-khoreografii-dlja-stseny-i-tantspola/</link>
<structure_change_frequency>0</structure_change_frequency>
<structure_priority>0.5</structure_priority>
<propertys>
</propertys>
</structure>
<structure id="94" menu_id="4">
<current_structure_id>1</current_structure_id>
<name>Стриптиз</name>
<show>0</show>
<show_link>1</show_link>
<level>2</level>
<id_parent>87</id_parent>
<is_external_link>0</is_external_link>
<external_link></external_link>
<link>/news/courses/striptiz/</link>
<structure_change_frequency>0</structure_change_frequency>
<structure_priority>0.5</structure_priority>
<propertys>
<property type="InformationSystemItem" id="51" name="inf_sys_test1">
<property_name>inf_sys_test1</property_name>
<order>40</order>
</property>
</propertys>
</structure>
<propertys>
</propertys>
</structure>
<structure id="88" menu_id="4">
<current_structure_id>1</current_structure_id>
<name>Тарифы</name>
<show>1</show>
<show_link>1</show_link>
<level>1</level>
<id_parent>7</id_parent>
<is_external_link>0</is_external_link>
<external_link></external_link>
<link>/news/tarifs/</link>
<structure_change_frequency>0</structure_change_frequency>
<structure_priority>0.5</structure_priority>
<propertys>
</propertys>
</structure>
<structure id="11" menu_id="4">
<current_structure_id>1</current_structure_id>
<name>Вопросы-ответы</name>
<show>1</show>
<show_link>1</show_link>
<level>1</level>
<id_parent>7</id_parent>
<is_external_link>0</is_external_link>
<external_link></external_link>
<link>/news/faq/</link>
<structure_change_frequency>2</structure_change_frequency>
<structure_priority>0.5</structure_priority>
<propertys>
</propertys>
</structure>
<propertys>
</propertys>
</structure>
<structure id="89" menu_id="4">
<current_structure_id>1</current_structure_id>
<name>Расписание</name>
<show>1</show>
<show_link>1</show_link>
<level>0</level>
<id_parent>0</id_parent>
<is_external_link>1</is_external_link>
<external_link>http://www.dancestudio.ru/raspisanie/</external_link>
<link>/raspisanie/</link>
<structure_change_frequency>0</structure_change_frequency>
<structure_priority>0.5</structure_priority>
<propertys>
</propertys>
</structure>
<structure id="16" menu_id="4">
<current_structure_id>1</current_structure_id>
<name>Преподаватели</name>
<show>1</show>
<show_link>1</show_link>
<level>0</level>
<id_parent>0</id_parent>
<is_external_link>0</is_external_link>
<external_link></external_link>
<link>/articles/</link>
<structure_change_frequency>2</structure_change_frequency>
<structure_priority>0.5</structure_priority>
<structure id="21" menu_id="4">
<current_structure_id>1</current_structure_id>
<name>RSS</name>
<show>0</show>
<show_link>1</show_link>
<level>1</level>
<id_parent>16</id_parent>
<is_external_link>0</is_external_link>
<external_link></external_link>
<link>/articles/rss/</link>
<structure_change_frequency>2</structure_change_frequency>
<structure_priority>0.5</structure_priority>
<propertys>
</propertys>
</structure>
<propertys>
</propertys>
</structure>
<structure id="15" menu_id="4">
<current_structure_id>1</current_structure_id>
<name>Фотогалерея</name>
<show>1</show>
<show_link>1</show_link>
<level>0</level>
<id_parent>0</id_parent>
<is_external_link>1</is_external_link>
<external_link>http://www.dancestudio.ru/photogallery/</external_link>
<link>/photogallery/</link>
<structure_change_frequency>2</structure_change_frequency>
<structure_priority>0.5</structure_priority>
<propertys>
</propertys>
</structure>
<structure id="90" menu_id="4">
<current_structure_id>1</current_structure_id>
<name>Контакты</name>
<show>1</show>
<show_link>1</show_link>
<level>0</level>
<id_parent>0</id_parent>
<is_external_link>0</is_external_link>
<external_link></external_link>
<link>/contacts/</link>
<structure_change_frequency>0</structure_change_frequency>
<structure_priority>0.5</structure_priority>
<propertys>
</propertys>
</structure>
</document>
BarS
#
Re: Вывод подменю в отдельный блок макета
Может все ж таки кто подскажет как вызвать показ только подменю...в момент нахождения в структуре...
BarS
#
Re: Вывод подменю в отдельный блок макета
natalya писал(а):
Если при вызове метода $Structure->ShowStructure (1,'MainMenu',$param) передавать параметры $param['show_groups'] = true и
$param['show_items'] = true, то инфогруппы и инфоэлементы попадут в XML-код вместе с остальными узлами структуры. И отображать их можно наравне с «обычными» узлами.


Не подскажете, как сделать, чтобы в меню отображались инфогруппы и количество инфоэлементов в каждой группе? Сами инфоэлементы отображать не надо.
http://superweb.pro/ — сайты на HostCMS под ключ
Модератор
#
Re: Вывод подменю в отдельный блок макета
plasmamedia,
Количество элементов неизвестно при показе структуры. Можете отдельно показывать инфосистему только с группами или только с элементами.

См. http://www.hostcms.ru/forums/17/2306/
#
Re: Вывод подменю в отдельный блок макета
Спасибо, разобралась.
А если в текущей группе нужно вывести еще и ссылки на входящие в нее элементы?
http://superweb.pro/ — сайты на HostCMS под ключ
Модератор
#
Re: Вывод подменю в отдельный блок макета
plasmamedia,
Вопрос обсуждается в Вашей теме форума "Общие вопросы".
#
Re: Вывод подменю в отдельный блок макета
Использовал для вывода подменю в отдельном месте:

<?
$Structure = new Structure();
$param = array();
$param['parent_id'] = CURRENT_STRUCTURE_ID;
$Structure->ShowStructure(5,'Подменю',$param);
?>

Однако, если мы начинаем переходить в эти пункты подменю, то подменю перестает выводиться.
Подскажите как сделать, чтобы подменю выводилось всегда, вне зависимости от того, в каком уровне вложенности мы находимся.

Уточню, что структура выглядит следующим образом:
1. Другая языковая версия сайта
1.1. Пункт1 меню
1.1.1. Пункт1 подменю
1.1.2. Пункт2 подменю
1.2. Пункт2 меню
1.2.1. Пункт1 подменю
1.2.2. Пункт2 подменю

В основном меню выводится пункты 1.1. и 1.2.
При переходе в них в отдельном месте появляются их подпункты, например если заходим в пункт 1.1., то в подменю - 1.1.1 и 1.2.1, но если мы заходим в один из этих подпунктов, то ничего не выодится.
Модератор
#
Re: Вывод подменю в отдельный блок макета
Qualis,
много раз обсуждалось: http://www.hostcms.ru/forums/22/2724/
#
Re: Вывод подменю в отдельный блок макета
Это все я уже пробовал прежде чем написать, не помогает.
При указании false выводятся все пункты, входящие в "1. Другая языковая версия сайта" без привязки к текущему уровню, а при указании "5" (это то меню, которое я указываю в структуре к нужной странице) вообще ничего не выводится
Авторизация