Как вывести фильтр по товарам по всему каталогу(XSLT) — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
 
(не показано 9 промежуточных версий 2 участников)
Строка 1: Строка 1:
Для того чтобы вывести фильтр по объектам каталога рекурсивно, а не по одному разделу, нужно  
+
'''Актуально для версии 2.9'''
 +
 
 +
Для того чтобы вывести фильтр по объектам каталога рекурсивно, а не по одному разделу, нужно  
 
воспользоваться следующей конструкцией:
 
воспользоваться следующей конструкцией:
<source lang="php">
+
<source lang="xml">
%system includeQuickEditJs()%
+
<xsl:apply-templates select="document('udata://catalog/search////80')" />
%system includeEditInPlaceJs()%
+
</source>
 +
[[category:Верстка в XSLT]][[Категория:Модуль Каталог]]
 +
где 80 - идентификатор (id) типа данных “Объект каталога” (параметр type id). Если указать при
 +
вызове макроса '''%catalog search()%''' параметр type_id , то вне зависимости от места нахождения
 +
этого типа данных в иерархии, система будет выводить поля этого типа данных.
 +
<source lang="xml">
 +
<xsl:apply-templates select="document('udata://catalog/getObjectsList/notemplate/(mode=all)')" />
 +
</source>
 +
Этот вызов макроса '''%catalog getObjectsList()%'''  выводит результаты фильтрации объектов каталога.
 +
Для того чтобы система вывела поля фильтра, она должна знать какие поля выводить для
 +
фильтрации.  Для этого в  модуле  “ Шаблоны Данных”  в типе данных “Объект каталога”  в
 +
свойствах, по которым Вы хотите фильтровать должен быть активирован пункт  "фильтруемое".
 +
 
 +
Если у Вас используется несколько типов данных, то можно применить следующее решение:
 +
<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>
 
</source>
  
[[category:Верстка в XSLT]]
+
'''Расширенный вариант этой статьи - [[Вывод_фильтров_для_всех_разделов_каталога]]'''

Текущая версия на 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))" />

Расширенный вариант этой статьи - Вывод_фильтров_для_всех_разделов_каталога