xsl в два столбца

KK
На сайте с 25.07.2006
Offline
138
777

Подскажите как реализовать в xsl вывод списка в два столбца? Мучаю hostcms.

Вот код строки - в данном случае в обоих столбцах выводится одно и то же содержание. а мне нужно разное... чтоб каждый item в своей ячейке выводился

	<xsl:template match="blocks/items/item">

<div class="rowContent">
<div class="левый столбец">контент</div>
<div class="правый столбец">контент</div>
</div>

</xsl:template>
ДП
На сайте с 23.11.2009
Offline
203
#1

Сдается мне, что вывод надо не в этом шаблоне организовывать, а в том месте, где перебираются blocks/items/item.

KK
На сайте с 25.07.2006
Offline
138
#2

Я вот как пытался:

<xsl:template match="blocks/items/item">

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

<div class="rowContent">
<div class="левый столбец">контент</div>

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

<div class="правый столбец">контент</div>
</div>

</xsl:if>

</xsl:template>

Но ругается, т.к. div'ы не закрыты в каждом "if"...

ДП
На сайте с 23.11.2009
Offline
203
#3

Насколько я понимаю xslt, в этот шаблон будет передаваться только один элемент blocks/items/item, поэтому логику отображения надо делать не в этом месте. Но по этому поводу я могу и ошибкаться.

Ayavryk
На сайте с 11.10.2003
Offline
209
#4

Вариант 1. Если непринципиально в каком порядке выводить

<xsl:template match="blocks/items">

<div class="rowContent">

<div class="левый столбец">

<!-- сюда попадут в обработку четные узлы -->

<xsl:apply-templates select="item[position() mod 2 = 0]" />

</div>

<div class="правый столбец">

<!-- сюда попадут в обработку четные узлы -->

<xsl:apply-templates select="item[position() mod 2 = 1]" />

</div>

</div>

</xsl:template>

<xsl:template match="item">

Код для вывода столбца

</xsl:template>

Вариант 2. Если нужно выводить строго по порядку

<xsl:template match="blocks/items">

<!-- определяем количество строк -->

<xsl:variable name="N" select="count(item) div 2" />

<div class="rowContent">

<div class="левый столбец">

<!-- сюда попадут в обработку первая половина узлов -->

<xsl:apply-templates select="item[position() &lt;= $N]" />

</div>

<div class="правый столбец">

<!-- сюда попадет в обработку вторая половина узлов -->

<xsl:apply-templates select="item[position() &gt; $N]" />

</div>

</div>

</xsl:template>

<xsl:template match="item">

Код для вывода столбца

</xsl:template>

---------- Добавлено в 08:28 ---------- Предыдущее сообщение было в 08:04 ----------

Если вообще по типу таблички тогда вот так:

<xsl:template match="blocks/items[position() mod 2 = 0]">

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

<div class="rowContent">

<div class="левый столбец"><xsl:apply-templates/></div>

<div class="правый столбец">

<xsl:apply-templates select="following-sibling::item[position() = 1]"></xsl:apply-templates>

<!-- то же самое select="../item[position()+1]" -->

</div>

</div>

</xsl:if>

</xsl:template>

Тынгыр, мынгыр, комсомол (http://erum.ru). Ехари, ехари, (жалобно) аяврик. /народная тунгусская песня/

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий