Сгруппировать товары по категориям (xslt / demodizi)

Материал из Umicms
Версия от 14:09, 12 апреля 2012; Romario (обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к:навигация, поиск

Описание:

На демонстрационном сайте 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>

Таким образом мы получим на втором уровне каталога список товаров разбитый по категориям.