отображение элементов из подгрупп

#
отображение элементов из подгрупп
Эта тема очень долго обсуждалась на форуме, но я так и не нашёл ответ.

Есть ИС "Портфолио". В нем три подгруппы. При отображении корня ИС выходит названия подгрупп.

Задача: Поправить XSL так что бы в корне выводилось определённое количество элементов из подгруп.

Я знаю как сделать это через шаблон, просто добавить в HTML конструкцию вызова ИС и указать там количество выводимых элементов, но это не решение.

Вот XSL:


   <xsl:template match="/">
      <xsl:apply-templates select="/document"/>
   </xsl:template>
   
   <xsl:template match="/document">
      
      <!-- Получаем ID родительской группы и записываем в переменную $parent_group_id -->
      <xsl:variable name="parent_group_id" select="blocks/parent_group_id"/>
      
      <!-- Если в находимся корне - выводим название информационной системы -->
      <xsl:if test="blocks/parent_group_id = 0">
         <h1>
            <xsl:value-of disable-output-escaping="yes" select="blocks/name"/>
         </h1>

         <!-- Описание выводится при отсутствии фильтрации по тэгам -->
         <xsl:if test="count(blocks/tags/tag) = 0">
            <xsl:value-of disable-output-escaping="yes" select="blocks/description"/>
         </xsl:if>
  <xsl:variable name="group_id" select="@id"/>

   <xsl:apply-templates select="/document/blocks/items//item[@group_id=$group_id]"/>
      </xsl:if>
      
      <!-- Если в находимся в группе - выводим название группы -->
      <xsl:if test="blocks/parent_group_id != 0">
         <h1>
            <xsl:value-of disable-output-escaping="yes" select=".//group[@id=$parent_group_id]/name"/>
         </h1>
         
      </xsl:if>
      
      <!-- Отображение подгрупп данной группы, только если подгруппы есть -->
      <xsl:if test="count(.//group[@parent_id=$parent_group_id]) &gt; 0">
         Разделы:
         <xsl:apply-templates select=".//group[@parent_id=$parent_group_id]" mode="groups"/>
      </xsl:if>
      
      <!-- Отображение записи информационной системы -->
      <table border="0" cellpadding="0" cellspacing="0" width="100%"><tr><td>
               <div style="margin-left:8px; margin-top:8px; margin-right:8px"><div class="floats">
                     <xsl:apply-templates select="blocks/items/item[item_status=1]"/>
      </div></div></td></tr></table>
      
      <!-- Строка ссылок на другие страницы информационной системы -->
      <xsl:if test="ОтображатьСсылкиНаСледующиеСтраницы=1">
         <p>
            <!-- Ссылка, для которой дописываются суффиксы page-XX/ -->
            <xsl:variable name="link">
               <xsl:value-of select="/document/blocks/url"/>
               <xsl:if test="$parent_group_id != 0">
                  <xsl:value-of select="/document/blocks//group[@id = $parent_group_id]/fullpath"/>
               </xsl:if>
            </xsl:variable>
            
            <xsl:call-template name="for">
               <xsl:with-param name="link" select="$link"/>
               <xsl:with-param name="items_on_page" select="blocks/items/items_on_page"/>
               <xsl:with-param name="current_page" select="blocks/items/current_page"/>
               <xsl:with-param name="count_items" select="blocks/items/count_items"/>
               <xsl:with-param name="visible_pages">5</xsl:with-param>
            </xsl:call-template>
         </p>
      </xsl:if>
      
      <div style="clear: both"></div>
      
      <xsl:if test="ОтображатьСсылкуНаАрхив=1">
         <div class="archives_4_ie"></div>
         <a href="{blocks/url}">
            <img src="/images/archives.png" style="filter: alpha(opacity=0); margin: 0px 0px -4px 0px"/>
         </a>
         <a href="{blocks/url}">Архив "<xsl:value-of disable-output-escaping="yes" select="blocks/name"/>"</a>
      </xsl:if>
   </xsl:template>
   
   <!-- Шаблон выводит рекурсивно ссылки на группы инф. элемента -->
   <xsl:template match="group" mode="goup_path">
      <xsl:variable name="parent_id" select="@parent_id"/>
      
      <xsl:apply-templates select="//group[@id=$parent_id]" mode="goup_path"/>
      
      <xsl:if test="@parent_id=0">
         <a href="{/document/blocks/url}">
            <xsl:value-of disable-output-escaping="yes" select="/document/blocks/name"/>
         </a>
      </xsl:if>
      
      <span class="path_arrow">&#x2192;</span>
      <a href="{/document/blocks/url}{fullpath}">
         <xsl:value-of disable-output-escaping="yes" select="name"/>
      </a>
   </xsl:template>
   
   <!-- ======================================================== -->
   <!-- Шаблон выводит ссылки подгруппы информационного элемента -->
   <!-- ======================================================== -->
   <xsl:template match="group" mode="groups">
           &#xA0; <a href="{/document/blocks/url}{fullpath}"><xsl:value-of disable-output-escaping="yes" select="name"/></a>
   </xsl:template>
   
   <!-- ======================== -->
   <!-- Данные об инф. элементах -->
   <!-- ======================== -->
   <xsl:template match="blocks/items/item">
      <div class="left">
         <div class="r">
            <div>
               <a href="{item_path}">
                  <img src="{item_small_image}" alt="{item_name}" style="margin: 3px 10px 10px 0px; border: 0px solid #999999;" align="left"/>
               </a><br />
               <!-- Название -->
               <div style="text-align: center;">
                  <a href="{item_path}">
                     <xsl:value-of disable-output-escaping="yes" select="item_name"/>
                  </a>
               </div>
            </div>
         </div>
         <div class="min"></div>
      </div>
      
   </xsl:template>
   
   <!-- /// Метки для информационного элемента /// -->
   <xsl:template match="tags/tag">
      <a href="{/document/blocks/url}tag/{tag_path_name}/" class="tag">
         <xsl:value-of select="tag_name"/>
      </a>
   <xsl:if test="position() != last()">,</xsl:if>&#xA0;</xsl:template>

(дальше код вывода ссылок на страницы, я его опустил что бы не засорять форум.)


Вопрос: как изменить XSL?

Заранее спасибо.
Модератор
#
Re: отображение элементов из подгрупп
nighilanth,
в данном случае нужно менять не XSL (т.к. в XML этой информации нет и XSL-у просто нечего обрабатывать), необходимо менять вызов.
Для этого в динамической странице перед вызовом ShowInformationSystem() проверить ID группы, и если он === 0, то положить его равным false, чтобы произошла выборка из всех групп.
#
Re: отображение элементов из подгрупп
А где это сделать? В смысле как поменять вызов в динамической странице?
Модератор
#
Re: отображение элементов из подгрупп
добавить выделенные жирным строки:
// Если находимся в корне - выбираем из всех групп
if ($GLOBALS['INFSYS_result']['group'] === 0)
{
$GLOBALS['INFSYS_result']['group'] = false;
}

$GLOBALS['LA_InformationSystem']->ShowInformationSystem($InformationSystem_id, $GLOBALS['INFSYS_result']['group'], $xsl_list, $InformationResult['items_on_page'], $InformationResult['items_begin'], $external_propertys, $property);
#
Re: отображение элементов из подгрупп
Я неправильно задал вопрос. Где нужно добавлять код. В каком файле?
Модератор
#
Re: отображение элементов из подгрупп
nighilanth,
скопировать типовую динамическую страницу инфосистем, дать ей новое имя и внести код. Отредактировать узел структуры и из выпадающего списка выбрать новую инфосистему.
#
Re: отображение элементов из подгрупп
Здорово! Всё получилось, Спасибо!
Модератор
#
Re: отображение элементов из подгрупп
nighilanth,
Пожалуйста
Авторизация