Как вывести фильтр по товарам по всему каталогу(XSLT) — различия между версиями
Elena (обсуждение | вклад) |
Mad grant (обсуждение | вклад) |
||
(не показаны 4 промежуточные версии этого же участника) | |||
Строка 1: | Строка 1: | ||
+ | '''Актуально для версии 2.9''' | ||
+ | |||
Для того чтобы вывести фильтр по объектам каталога рекурсивно, а не по одному разделу, нужно | Для того чтобы вывести фильтр по объектам каталога рекурсивно, а не по одному разделу, нужно | ||
воспользоваться следующей конструкцией: | воспользоваться следующей конструкцией: | ||
− | <source lang=" | + | <source lang="xml"> |
<xsl:apply-templates select="document('udata://catalog/search////80')" /> | <xsl:apply-templates select="document('udata://catalog/search////80')" /> | ||
</source> | </source> | ||
− | [[category:Верстка в XSLT]] | + | [[category:Верстка в XSLT]][[Категория:Модуль Каталог]] |
где 80 - идентификатор (id) типа данных “Объект каталога” (параметр type id). Если указать при | где 80 - идентификатор (id) типа данных “Объект каталога” (параметр type id). Если указать при | ||
вызове макроса '''%catalog search()%''' параметр type_id , то вне зависимости от места нахождения | вызове макроса '''%catalog search()%''' параметр type_id , то вне зависимости от места нахождения | ||
этого типа данных в иерархии, система будет выводить поля этого типа данных. | этого типа данных в иерархии, система будет выводить поля этого типа данных. | ||
− | <source lang=" | + | <source lang="xml"> |
<xsl:apply-templates select="document('udata://catalog/getObjectsList/notemplate/(mode=all)')" /> | <xsl:apply-templates select="document('udata://catalog/getObjectsList/notemplate/(mode=all)')" /> | ||
</source> | </source> | ||
Строка 15: | Строка 17: | ||
фильтрации. Для этого в модуле “ Шаблоны Данных” в типе данных “Объект каталога” в | фильтрации. Для этого в модуле “ Шаблоны Данных” в типе данных “Объект каталога” в | ||
свойствах, по которым Вы хотите фильтровать должен быть активирован пункт "фильтруемое". | свойствах, по которым Вы хотите фильтровать должен быть активирован пункт "фильтруемое". | ||
+ | |||
+ | Если у Вас используется несколько типов данных, то можно применить следующее решение: | ||
+ | <source lang="xml"> | ||
+ | <!-- задаем переменную "type" и присваиваем ей значение идентификатора типа данных товаров --> | ||
+ | <xsl:variable name="type" select="document(concat('udata://catalog/getObjectsList/', page/@id, '////3/'))/udata/type_id"/> | ||
+ | <!-- передаем в catalog/search созданную переменную "type" --> | ||
+ | <xsl:apply-templates select="document(concat('udata://catalog/search////', $type))" /> | ||
+ | </source> | ||
+ | |||
+ | '''Расширенный вариант этой статьи - [[Вывод_фильтров_для_всех_разделов_каталога]]''' |
Текущая версия на 15:05, 23 сентября 2013
Актуально для версии 2.9
Для того чтобы вывести фильтр по объектам каталога рекурсивно, а не по одному разделу, нужно воспользоваться следующей конструкцией:
<xsl:apply-templates select="document('udata://catalog/search////80')" />
где 80 - идентификатор (id) типа данных “Объект каталога” (параметр type id). Если указать при вызове макроса %catalog search()% параметр type_id , то вне зависимости от места нахождения этого типа данных в иерархии, система будет выводить поля этого типа данных.
<xsl:apply-templates select="document('udata://catalog/getObjectsList/notemplate/(mode=all)')" />
Этот вызов макроса %catalog getObjectsList()% выводит результаты фильтрации объектов каталога. Для того чтобы система вывела поля фильтра, она должна знать какие поля выводить для фильтрации. Для этого в модуле “ Шаблоны Данных” в типе данных “Объект каталога” в свойствах, по которым Вы хотите фильтровать должен быть активирован пункт "фильтруемое".
Если у Вас используется несколько типов данных, то можно применить следующее решение:
<!-- задаем переменную "type" и присваиваем ей значение идентификатора типа данных товаров -->
<xsl:variable name="type" select="document(concat('udata://catalog/getObjectsList/', page/@id, '////3/'))/udata/type_id"/>
<!-- передаем в catalog/search созданную переменную "type" -->
<xsl:apply-templates select="document(concat('udata://catalog/search////', $type))" />
Расширенный вариант этой статьи - Вывод_фильтров_для_всех_разделов_каталога