Как вывести все содержимое ИС (группы,подгруппы,инф.эл-ты) в раскрытом виде?

#
Как вывести все содержимое ИС (группы,подгруппы,инф.эл-ты) в раскрытом виде?
Здравствуйте!Как вывести все содержимое ИС (группы,подгруппы,инф.эл-ты) в раскрытом виде? Т.е. мне нужна простая реализация древовидного вывода содержимого  информационной системы.
Есть ИС "Услуги" и вот как выглядит

Услуга 1 (группа)
-- Услуга 1.1. (инф. эл-т)
-- --Услуга 1.1. (инф. эл-т)
-- Услуга 1.1. (инф. эл-т)
Услуга 2 (инф.элемент)
Услуга 3 (инф.элемент)
Услуга 4 (инф.элемент)

Т.е. мне просто нужно,чтобы это все было в таком виде. Что я пока для этого сделал:
XSL:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0"
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
   xmlns:hostcms="http://www.hostcms.ru/"
   exclude-result-prefixes="hostcms">
   
   <xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" encoding="utf-8" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
   
   <!-- СписокЭлементовИнфосистемы -->
   
   <xsl:template match="/">
      <xsl:apply-templates select="/informationsystem"/>
   </xsl:template>
   
   <xsl:variable name="n" select="number(3)"/>
   
   <xsl:template match="/informationsystem">
      
      <!-- Получаем ID родительской группы и записываем в переменную $group -->
      <xsl:variable name="group" select="group"/>
      
      <!-- Отображение подгрупп данной группы, только если подгруппы есть и не идет фильтра по меткам -->
      <xsl:if test="count(tag) = 0 and informationsystem_item and count(.//informationsystem_group[parent_id=$group]) &gt; 0">
         <ul class="aside-list">
            <xsl:apply-templates select=".//informationsystem_group[parent_id=$group][position() mod $n = 1]" mode="groups"/>
            <xsl:apply-templates select="informationsystem_item"/>
         </ul>
      </xsl:if>
   </xsl:template>   

   <!-- Шаблон выводит ссылки подгруппы информационного элемента -->
   <xsl:template match="informationsystem_group" mode="groups">
      <ul class="aside-list">
      <a href="{url}" class="aside-link"><span><xsl:value-of disable-output-escaping="yes" select="name"/></span></a>
         <div class="aside-link">
            <ul class="aside-list--inner">
               <xsl:apply-templates select="informationsystem_item"/>
            </ul>
         </div>
      </ul>
   </xsl:template>
   
   <!-- Шаблон вывода информационного элемента -->
   <xsl:template match="informationsystem_item">
      <li class="aside-item">
      <a href="{url}" class="aside-link"><span><xsl:value-of disable-output-escaping="yes" select="name"/></span></a>
      </li>
   </xsl:template>
</xsl:stylesheet>


В макет:

<?php
            if (Core::moduleIsActive('informationsystem'))
               {
                  // Услуги на главной
                     $Informationsystem_Controller_Show = new Informationsystem_Controller_Show(
                        Core_Entity::factory('Informationsystem', 19));
                           $Informationsystem_Controller_Show
                              ->xsl(
                                 Core_Entity::factory('Xsl')->getByName('УслугиСлеваСайт2')
                                       )
                                    ->groupsMode('all')
                                       ->limit(20)
                                       ->show();
                  }   
            ?>   


Но выходит только вот так:

Услуга 1 (группа)
Услуга 2 (инф.элемент)
Услуга 3 (инф.элемент)
Услуга 4 (инф.элемент)

т.е. подгрупп нет. Как быть?
Модератор
#
Re: Как вывести все содержимое ИС (группы,подгруппы,инф.эл-ты) в раскрытом виде?
1. ->limit(20)
выбирается всего 20 элементов. у вас во всех группах 20 элементов? Если нет, то укажите, например, 9999.
2. Где в корне выводите, выбирайте элементы именно из корня:
<xsl:apply-templates select="informationsystem_item[informationsystem_group_id = 0]"/>

3. Внутри шаблона группы выводите из группы:
<xsl:variable name="id" select="@id" />
<xsl:apply-templates select="/informationsystem/informationsystem_item[informationsystem_group_id = $id]"/>
#
Re: Как вывести все содержимое ИС (группы,подгруппы,инф.эл-ты) в раскрытом виде?
pd-art писал(а):
если у вас получилось, выложите рабочий код пожалуйста!!!
#
Re: Как вывести все содержимое ИС (группы,подгруппы,инф.эл-ты) в раскрытом виде?
xelaxela13, мне бы самому понять где и что править.
#
Re: Как вывести все содержимое ИС (группы,подгруппы,инф.эл-ты) в раскрытом виде?
HostCMS,
Цитата:

2. Где в корне выводите, выбирайте элементы именно из корня:
<xsl:apply-templates select="informationsystem_item[informationsystem_group_id = 0]"/>


Этот блок получается?

<xsl:template match="/">
      <xsl:apply-templates select="/informationsystem"/>
</xsl:template>


Цитата:

3. Внутри шаблона группы выводите из группы:
<xsl:variable name="id" select="@id" />
<xsl:apply-templates select="/informationsystem/informationsystem_item[informationsystem_group_id = $id]"/>


Этот блок?


<xsl:template match="/informationsystem">
      
      <!-- Получаем ID родительской группы и записываем в переменную $group -->
      <xsl:variable name="group" select="group"/>
      
      <!-- Отображение подгрупп данной группы, только если подгруппы есть и не идет фильтра по меткам -->
      <xsl:if test="count(tag) = 0 and informationsystem_item and count(.//informationsystem_group[parent_id=$group]) &gt; 0">
         <ul class="aside-list">
            <xsl:apply-templates select=".//informationsystem_group[parent_id=$group][position() mod $n = 1]" mode="groups"/>
            <xsl:apply-templates select="informationsystem_item"/>
         </ul>
      </xsl:if>
   </xsl:template>  


#
Re: Как вывести все содержимое ИС (группы,подгруппы,инф.эл-ты) в раскрытом виде?
HostCMS, я пришел к такому решению,там выводится группы и элементы ИС,но не выводятся элементы группы. Вот XSL,что в нем не так?



<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0"
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
   xmlns:hostcms="http://www.hostcms.ru/"
   exclude-result-prefixes="hostcms">
   <xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" encoding="utf-8" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
   
   <!-- МагазинГруппыТоваровНаГлавной -->
   
   <xsl:template match="/">
      <xsl:apply-templates select="/informationsystem"/>
   </xsl:template>
   
   <!-- Шаблон для магазина -->
   <xsl:template match="/informationsystem">
      <aside class="aside">
         <ul class="aside-list">            
                 <xsl:apply-templates select="informationsystem_group"/>
                                <xsl:apply-templates select="informationsystem_item"/>
         </ul>
      </aside>
   </xsl:template>
   
   <!-- Шаблон для групп товара -->
   <xsl:template match="informationsystem_group">
      <li class="aside-item">
         <xsl:if test="informationsystem_group">
            <xsl:attribute name="class">level0 level-top parent</xsl:attribute>
         </xsl:if>
         
         <a href="{url}" hostcms:id="{@id}" hostcms:field="name" hostcms:entity="informationsystem_group">
            <xsl:if test="@id = /informationsystem/current_group_id">
               <xsl:attribute name="class">current-group</xsl:attribute>
            </xsl:if>
            <xsl:value-of disable-output-escaping="yes" select="name"/>
         </a>
         
         <xsl:if test="informationsystem_item">
            <strong class="submenu-caret" onclick="$('#submenu_{@id}').toggle(); $(this).toggleClass('opened')"></strong>
         </xsl:if>
         
         <!-- Если есть элементы -->
         <xsl:if test="informationsystem_item">
            <ul id="submenu_{@id}" class="aside-list--inner" style="display: block;">
               <xsl:apply-templates select="informationsystem_item"/>
            </ul>
         </xsl:if>
      </li>
   </xsl:template>
   
   <!-- Шаблон вывода информационного элемента -->
   <xsl:template match="informationsystem_item">
      <li class="aside-item">
      <a href="{url}" class="aside-link"><span><xsl:value-of disable-output-escaping="yes" select="name"/></span></a>
      </li>
   </xsl:template>
   
</xsl:stylesheet>
Авторизация