Например, есть магазин (
@store
) и в нём товары (@items
). Нужно с помощью XSLT выводить их в 2, 3 или 4 колонки.@store = Store.find(params[:id])
@items = @store.items
Вот так я генерирую XML
# Store items
xml.tag!("item-list") do
@items.each do |item|
xml.tag!("item", :id => item.id) do
xml.tag! "name" do
xml << (link_to truncate(item.name, 20), :controller => "store", :action => "item", :id => item.id)
end
xml.tag! "description", truncate(item.description, 36)
xml.tag! "price", item.price
end
end
end
В файле XSLT задаю параметр, в котором будет задаваться размер группы
<xsl:param name="group-size" select="'3'" />
, чтобы легче в-последствии было его изменять.А примерно вот так выглядит файл XSLT трансформации.
<xsl:param name="group-size" select="'3'" />
...
<xsl:apply-templates select="//item-list" />
<xsl:template match="item-list">
<table class="item-gallery">
<xsl:apply-templates select="item[position() mod $group-size = 1]" mode="row" />
</table>
</xsl:template>
<!-- Строка -->
<xsl:template match="item" mode="row">
<tr>
<xsl:apply-templates select=". | following-sibling::item[position() < $group-size]" />
</tr>
</xsl:template>
<!-- Ячейка -->
<xsl:template match="item">
<td>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td align="left" colspan="2"><strong><xsl:copy-of select="item-name/*" /></strong></td></tr>
<tr><td align="left" colspan="2"><xsl:value-of select="item-description" /></td></tr>
<tr><td align="left"><strong>price:</strong></td><td align="right"><xsl:value-of select="item-price" /></td></tr>
</table>
</td>
</xsl:template>
Вуа-ля! Элементы выводятся в строки по 3.
1 Комментариев :
Спасибо огромное! Очень выручил ваш пост!
Отправить комментарий
Жги!