Сгруппировать товары по категориям (xslt / demodizi) — различия между версиями
Romario (обсуждение | вклад) |
Romario (обсуждение | вклад) |
||
Строка 20: | Строка 20: | ||
<source lang="xml"> | <source lang="xml"> | ||
<xsl:template match="/result[@method = 'category'][count(/result/parents/page) = 1]"> | <xsl:template match="/result[@method = 'category'][count(/result/parents/page) = 1]"> | ||
− | <xsl:apply-templates select="document(concat('udata://catalog/getCategoryList/void/', @id, '//1/'))" mode="main_cat" /> | + | <xsl:apply-templates select="document(concat('udata://catalog/getCategoryList/void/', @id, '//1/'))//item" mode="main_cat" /> |
</xsl:template> | </xsl:template> | ||
</source> | </source> |
Текущая версия на 14:09, 12 апреля 2012
Описание:
На демонстрационном сайте 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>
Таким образом мы получим на втором уровне каталога список товаров разбитый по категориям.