Вывод меню заданного уровня вложенности

#
Вывод меню заданного уровня вложенности
Добрый день.Подскажите как организовать вывод меню определенного уровня вложенности.
1).Есть три меню, расположенные в разных местах сайта.
2).Нужно чтобы в одном отображались группы верхнего уровня, по нажатию на группу, в другом отображались подгруппы этой конкретной группы, нажимаем на подгруппу-в третьем меню отображаются дочерние подгруппы.
3).Главное чтобы в каждом меню отображались только группы определенной вложенности и только дочерние той группы по которой кликнули в предыдущем меню( И БОЛЬШЕ НИЧЕГО НЕ ОТОБРАЖАЛОСЬ!!! )
4).На форуме ничего подобного не нашел, в айпи таких методов ни для ShowStructure, ни для ShowShop не нашел. Нашел что-то похожее связанное с "child", но как прикрутить не знаю.
momentomore
Модератор
#
Re: Вывод меню заданного уровня вложенности
wbags,
посмотрите в поиске: http://www.hostcms.ru/search/?text=CURRENT_STRUCTURE_ID
#
Re: Вывод меню заданного уровня вложенности
Ладно, попробую еще раз прошерстить(вроде все посты на эту тему прошел, но задача на 100% там не решена.Спасибо за ответ.Если не решу-буду опять Вас беспокоить.Удачи!
momentomore
Модератор
#
Re: Вывод меню заданного уровня вложенности
wbags,
пример вывода подменю от текущей группы там точно решено несколько раз, тема поднимается стабильно раз в месяц.
#
Re: Вывод меню заданного уровня вложенности
Дело в том,что в приведенных примерах кроме подменю, выводятся и группы вышестоящего уровня,а нужно ТОЛЬКО ДОЧЕРНИЕ ГРУППЫ И БОЛЬШЕ НИЧЕГО,
momentomore
Модератор
#
Re: Вывод меню заданного уровня вложенности
wbags,
как это? Беру первый попавшийся пример - http://www.hostcms.ru/forums/22/494/
Вы хотите сказать, что в данном примере выводятся группы верхнего уровня, которые выше CURRENT_STRUCTURE_ID?
#
Re: Вывод меню заданного уровня вложенности
Я несколько дней уже парюсь,перепробовал разные варианты.Возможно не могу сопоставить конкретному методу вызова определенный XSL.Может подкорректируете конкретно мои:
1).Это в макете:
<?php
$Structure = & singleton('Structure');
$param = array();
$param['parent_id'] = CURRENT_STRUCTURE_ID;
$param['show_shop_groups']=true;
$external_propertys = array();
$external_propertys['ТекущаяГруппа'] = to_int($GLOBALS['shop_item_path']['group']);
$Structure->ShowStructure(false,'ЛевоеМеню', $param, $external_propertys);
?>

2)Это XSL :
<?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>
      <!-- Выбираем узлы структуры -->
      <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="current_structure_id"><xsl:choose>
<xsl:when test="/document/ТекущаяГруппа/node() and /document/ТекущаяГруппа != '0'">group_<xsl:value-of select="/document/ТекущаяГруппа"/></xsl:when>
<xsl:otherwise>
<xsl:value-of select="/document/structure/current_structure_id"/>
</xsl:otherwise>
</xsl:choose></xsl:variable>

   <!-- Расчитываем размер отступа -->
   <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>



   <!-- Выбираем подузлы структуры -->


   <xsl:if test="current_structure_id=@id or count(.//structure[@id=$current_structure_id])=1">
   <xsl:if test="count(structure[show=1]) > 1">

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

   </ul>
</xsl:if>

   </xsl:if>
</li>
</xsl:template>
</xsl:stylesheet>
momentomore
Модератор
#
Re: Вывод меню заданного уровня вложенности
Вы не сказали, что из этого кода не работает?!

P.S. false при вызове метода не соотносится с wbags писал(а):
Главное чтобы в каждом меню отображались только группы определенной вложенности и только дочерние той группы по которой кликнули в предыдущем меню (И БОЛЬШЕ НИЧЕГО НЕ ОТОБРАЖАЛОСЬ!!!)

Нужно указать ID меню, из которого должна идти выборка
#
Re: Вывод меню заданного уровня вложенности
Из этого кода не работает САМА ИДЕЯ ЗАДАЧИ. Выводятся группы инт.магазина верхнего уровня.Кликаем на любой группе-в другом меню(идентичном как и первое)не выводятся подгруппы этой группы(может это второе меню должно как-то отличаться от первого).
P.S.Даже если проставил ID меню-все равно ничего не меняется.
momentomore
Модератор
#
Re: Вывод меню заданного уровня вложенности
wbags,
а при чем вывод групп магазина? Если речь о группах магазина - то выводите с помощью ShowShop, а не ShowStrucutre
http://www.hostcms.ru/api/HostCMS_5/shop.html#methodShowShop
Укажите $param['current_group_id'] (ID текущей группы посмотрите в динамической страницы и используйте его, например $GLOBALS['shop_item_path']['group']).
+ соответствующее значение $param['xml_show_group_type']
Авторизация