@KoNnY
web-master

Как организовать попарный вывод элементов списка в UMI.CMS?

Добрый день!
Требуется реализовать вывод списка элементов попарно, например:
<div>
<span class="element-1">Элемент 1</span>
<span class="element-2">Элемент 2</span>
</div>
<div>
<span class="element-3">Элемент 3</span>
<span class="element-4">Элемент 4</span>
</div>


Т.е. по 2 элемента находятся в контейнере div

Пробовал воспользоваться следующей схемой - добавлять теги в зависимости он
позиции элемента:
<xsl:template match="item" mode="portfolio_item">
<xsl:if test="position() mod 2 = 1">
  <div>
</xsl:if>
<span class="element-{position()}" >
<xsl:value-of select='document(concat("upage://", @id,
".preview"))/udata/property/value' disable-output-escaping="yes" />
</span>
<xsl:if test="position() mod 2 = 0 or position() = last()">
  </div>
</xsl:if>
</xsl:template>


Т.е. перед нечетным элементом добавлять тег а после нечетного элемента
или последнего в списке - закрывающий тег

Но в итоге всякий раз получал ошибку, хотя логика построения верна. Скажите,
пожалуйста, как можно вывести элементы списка попарно? Возможно ли это?
  • Вопрос задан
  • 199 просмотров
Пригласить эксперта
Ответы на вопрос 1
@ilyarsoftware
Попробуйте так:
<xsl:param name="colnum" select="2"/>

<xsl:template match="udata[@module = 'catalog'][@method = 'getObjectsList']">
  <xsl:apply-templates select="lines/item[position() = 1]|lines/item[position() mod $colnum = 1]"/>
</xsl:template>

<xsl:template match="item">
  <div>
     <xsl:apply-templates select=".|following-sibling::item[position() &lt; $colnum]" mode="div"/>
  </div>
</xsl:template>

<xsl:template match="item" mode="div">
  <span class="element-{@id}" >
    <xsl:value-of select="."/>
  </span>
</xsl:template>

Демонстрация примера.
На эту тему есть статья: Таблицы в несколько колонок в XSLT-шаблонах и похожий вопрос рассматривается в теме: вывод объектов каталога.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы