Сгруппировать товары по категориям (xslt / demodizi)
Описание:
На демонстрационном сайте UMI.CMS с шаблоном дизайна современный, товары на втором уровне каталога (например DVD Техника) отображаются все вместе.
Задача:
Разбить товары на категории в зависимости от поткатегорий этого каталога.
Решение:
Шаблон отвечающий за отображение товаров на втором уровне каталога, по умолчанию, находится в файле ~\xsltTpls\modules\catalog\category-view.xsl:
<xsl:template match="/result[@method = 'category'][count(/result/parents/page) = 1]">
<xsl:apply-templates select="document(concat('udata://catalog/getObjectsList/', page/@id, '////2/'))/udata" />
</xsl:template>
В данной конструкции вызываются все объекты каталога из 2х подуровней каталога.
Данный шаблон заменим на следующий:
<xsl:template match="/result[@method = 'category'][count(/result/parents/page) = 1]">
<xsl:apply-templates select="document(concat('udata://catalog/getCategoryList/void/', @id, '//1/'))//item" mode="main_cat" />
</xsl:template>
В данном шаблоне мы заменили вызов объектов каталога на вызов категорий каталога.
Теперь нам необходимо написать шаблон для категорий каталога, таким образом, чтобы из каждой категории вызывались только "свои: объекты:
<xsl:template match="udata[@method = 'getCategoryList']//item" mode="main_cat">
<h2>
<a href="{@link}" umi:field-name="name" umi:delete="delete" umi:empty="&empty-section-name;">
<xsl:value-of select="." />
</a>
</h2>
<hr/>
<xsl:apply-templates select="document(concat('udata://catalog/getObjectsList//',@id))/udata" />
</xsl:template>
Таким образом мы получим на втором уровне каталога список товаров разбитый по категориям.