Вывод элементов ИС в подгруппах

#
Вывод элементов ИС в подгруппах
Ув. товарищи из техподдержки (и просто сочувствующие).

Я относительно новичок в Host CMS, но до сего момента удавалось разбираться во всех непонятных моментах самостоятельно. Но вот на этом эпизоде встал в тупик.

Суть задачи такова. В ИС есть группы трехуровневой вложенности. "Группы альбомов", "альбомы" и "фото"/"видео" в каждом из "альбомов". Ладно, пусть будет двухуровневая вложенность, и в "альбомах" уже элементы должны быть, - это не суть, проблема остается.

Показ ГАЛЕРЕИ in-da XSL я начинаю стандартно:

<xsl:template match="/">
   <xsl:apply-templates select="/document"/>
</xsl:template>
   
<xsl:template match="/document">
   <xsl:variable name="parent_group_id" select="blocks/parent_group_id"/>

   <!-- если в корневой группе -->
   <xsl:if test="$parent_group_id = 0">
      <xsl:value-of disable-output-escaping="yes" select="blocks/name"/>

      <!-- выводим категории альбомов -->
      <xsl:if test="count(.//group[@parent_id=$parent_group_id]) &gt; 0">
         <xsl:apply-templates select=".//group[@parent_id=$parent_group_id]" mode="rootgroups"/>
      </xsl:if>
   </xsl:if>

   <!-- Если в находимся в группе -->
   <xsl:if test="$parent_group_id != 0">
      <!-- (TODO: страничка Галерея_подробно д.б. ЗДЕСЬ) -->
   </xsl:if>
</xsl:template>


Далее идёт вывод категорий альбомов:
   <xsl:template match="group" mode="rootgroups">
      <xsl:variable name="id" select="@id" />
      <table class="gallery_cathholder">
      <tr><td></td>
      <td>
         <xsl:apply-templates select=".//group[@parent_id=$id]" mode="albums"/>
      </td>
      <td></td></tr>
      </table>
      <div class="gallery_span"> </div>
   </xsl:template>


и затем выводится сам альбом. А вот здесь и происходит самое интересное (и непонятное).

   <!-- Шаблон выводит альбом -->
<xsl:template match="group" mode="albums">
<xsl:variable name="id" select="@id" />
<xsl:variable name="count_videos"><xsl:value-of select="count(.//item[item_propertys/item_property[@xml_name = 'video']/value!=''])"/></xsl:variable>
<xsl:variable name="count_photos"><xsl:value-of select="count(.//item[item_small_image=1])"/></xsl:variable>
<xsl:variable name="count_groups"><xsl:value-of select="count(.//group[@parent_id=$id])"/></xsl:variable>

<div class="gallery_span">Фотографий в альбоме: <xsl:value-of select="$count_photos"/></div>
<table class="gallery_albholder">
   <tr>
   <!-- собственно, здесь "кишки" уже несущественны -->
</tr></table>
<div class="gallery_span"> </div>
</xsl:template>


Суть проблемы в том, что нужно, находясь в шаблоне подгруппы ИС (<xsl:template match="group" mode="albums">, прочитать и получить количество элементов ИС, входящих в эту подгруппу, (активных, и) удовлетворяющих некоторому данному условию.

И я то ли туплю, то ли чего-то недопонимаю, но у меня НИКАК не получается сформировать условие вот в этом месте

<xsl:variable name="count_videos"><xsl:value-of select="count(.//item[item_propertys/item_property[@xml_name = 'video']/value!=''])"/></xsl:variable>
<xsl:variable name="count_photos"><xsl:value-of select="count(.//item[item_small_image=1])"/></xsl:variable>


- такое, чтобы $count_photos было ненулевым. А я же вижу эти альбомы, вижу что активных элементов там явно >0.

А выводится всё время 0.

---------------------------------

Данный XSL-шаблон используется в "Типовые динамические страницы: Информационная система для галереи", и указан в пункте "XSL шаблон для отображения списка элементов информационной системы"

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

Всё перепробовал, ничего не работает, всё 0 даёт. Притом что id группы выводится правильно, и название альбома - тоже.
#
Re: Вывод элементов ИС в подгруппах
Вы не там ищете узлы item

В выражении
.//item[item_small_image=1]

точка означает текущий узел, а два слеша - поиск среди всех его потомков, независимо от уровня вложенности.
Тут две ошибки.
Во1х, у узлов item нет иерархии вложенности, она есть только у групп. Поэтому // в этом выражении не надо.
Во2х, точка тут тоже лишняя, так как текущий узел (согласно декларации <xsl:template match="group" mode="..."> - это некий group.
Если же вы посмотрите на структуру xml, то узлы item являются потомками узла blocks а не group.
А чтобы обратиться к узлам item из неизвестного по уровню вложенности узла group, проще всего построить к нему полный путь от корня документа:
/document/blocks/item

Кроме того, условие item_small_image=1 тоже не совсем верно - значение узла item_small_image это строка а не число, поэтому ее надо проверять на непустоту.

Ну и последний штрих - в данном случае имеет смысл использовать сокращенную форму записи тега xsl:variable.

Таким образом, у вас должно получится нечто следующее:
<xsl:variable name="count_videos" select="count(/document/blocks/item[item_propertys/item_property[@xml_name = 'video']/value != ''])"/>
и
<xsl:variable name="count_photos" select="count(/document/blocks/item[item_small_image != ''])"/>


Вот как-то так...
Заказов не беру. Консультирую редко.
#
Re: Вывод элементов ИС в подгруппах
Kotoff, огромное спасибо!! Прояснили именно то, что надо было!
#
Re: Вывод элементов ИС в подгруппах
Kotoff, увы, нет не помогло.

Последовательно перепробовал варианты:

count(/document/blocks/items/item)
count(/document/blocks/item)
count(/document/blocks/items/item[item_status=1])
count(/document/blocks/item[item_status=1])


Всё нуль даёт, ну абсолютно всё.
#
Re: Вывод элементов ИС в подгруппах
up! на всякий случай
#
Re: Вывод элементов ИС в подгруппах
Да, пардон, путь к элементам, конечно же, /document/blocks/items/item - писал вчера по памяти, ошибся.
Это для метода ShowInformationSystem

А для метода ShowInformationSystemItem путь будет /document/item

Поэтому уточните, каким методом в данном случае вы показываете страницу, а потом еще убедитесь, что в xml действительно есть элементы item.
Заказов не беру. Консультирую редко.
#
Re: Вывод элементов ИС в подгруппах
Kotoff, я использую этот XSL для вывода "СТАНДАРТНОЙ динамической страницы" "Информационная система для галереи" (см моё первое сообщение, в конце).

Вот тоже думаю, может в этом дело, и это "они" не добавляют items ?
#
Re: Вывод элементов ИС в подгруппах
ComradeVoland, так вы в xml-то посмотрите, ну чего же проще-то?
Заказов не беру. Консультирую редко.
#
Re: Вывод элементов ИС в подгруппах
Kotoff, а как?! Объясните пожалуйста, где можно увидеть промежуточно генерируемый xml ?
#
Re: Вывод элементов ИС в подгруппах
ComradeVoland, попробуйте почитать документацию к системе
Например, есть чудесная книжечка "Руководство по интеграции системы управления сайтом HostCMS v. 5".
Ответ на ваш вопрос написан в ней на страницах 6 и 7. А кроме ответа на этот вопрос там есть еще 86 страниц полезной информации.

А вот отсюда http://hostcms.ru/documentation/ можно накачать еще несколько полезных руководств
Заказов не беру. Консультирую редко.
Авторизация