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