Определение позиции объекта в списке данных, первый – последний, четный – нечетный

Материал из Umicms
Перейти к:навигация, поиск

Выполнив какой-то запрос с помощью протокола udata, допустим udata/content/menu, мы получаем список объектов, которые далее будем обрабатывать, пример исходных данных:

<udata module="content" method="menu" generation-time="0.052330">
  <items>
    <item id="1" link="/" name="Добро пожаловать" xlink:href="upage://1">Добро пожаловать</item>
    <item id="2" link="/talks/" name="Форум" xlink:href="upage://2">Форум</item>
    <item id="13" link="/vse_novosti/" name="Все новости" xlink:href="upage://13">Все новости</item>
    <item id="26" link="/contacts/" name="Обратная связь" xlink:href="upage://26">Обратная связь</item>
    <item id="27" link="/umicms/" name="FAQ" xlink:href="upage://27">FAQ</item>
  </items>
</udata>

В шаблоне обработчике, определить позицию объекта, item’a, мы можем с помощью xslt-функции position(). Условие определяющее, что элемент последний:

<xsl:template match="item[position() = last()]">
...
</xsl:template>

Условие определяющее, что элемент первый:

<xsl:template match="item[position() = first()]">
...
</xsl:template>

Для определения четности – нечетности элемента можно дополнительно воспользоваться функцией mod(), которая выдает значение равное остатку от деления. Условие для четного элемента:

<xsl:if test="position() mod 2 = 0">
...
</xsl:if>

Условие для нечетного элемента:

<xsl:if test="position() mod 2 = 1">
...
</xsl:if>

Пример комбинированного условия:

<xsl:if test="position() mod 4 = 0 and position() != last()">
...
</xsl:if>