Определение позиции объекта в списке данных, первый – последний, четный – нечетный
Материал из 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>