XSLT - Выводим элементы в несколько колонок.
Очень часто возникает необходимость вывести информацию (картинки, ссылки на файлы, просто блоки текста) в несколько колонок. Если мы имеем однотипные записи
Пример:
<image title="One"/>
<image title="Wto"/>
<image title="Three"/>
И хотим вывести их в таблицу в две колонки. То в XSL шаблоне нам достаточно сделать двойной цикл.
1 Для вывода записей построчно:
Пример:
<table>
<xsl:variable name="num_cols" select="2"/>
<xsl:for-each
select="image[position() = 1 or position() mod $num_cols = 1]">
<tr>
<xsl:for-each
select=".|following-sibling::image[position() < $num_cols]">
<td>
<xsl:value-of "@title" />
</td>
</xsl:for-each>
</tr>
</xsl:for-each>
</table>
На выходе мы получим
Пример:
<table>
<tr>
<td> One </td>
<td> Two </td>
</tr>
<tr>
<td> Three </td>
</tr>
</table>
Для вывода записей пополосно:
Пример:
<table>
<tr>
<xsl:variable name="num_cols" select="4"/>
<xsl:variable name="num_rows" select="count(./image) div $num_cols"/>
<xsl:for-each select="image[position() = 1 or position() mod $num_rows = 1]">
<xsl:for-each select=".|following-sibling::image[position() < $num_rows]">
<td>
<xsl:value-of "@title" />
</td>
</xsl:for-each>
</xsl:for-each>
</tr>
</table>
На выходе мы получим
Пример:
<table>
<tr>
<td> One <br />
Two <br />
</td>
<td> Three <br />
</tr>
</table>