Как вывести все товары выбранного раздела каталога вне зависимости от вложенности XSLT — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
 
(не показано 18 промежуточных версий этого же участника)
Строка 1: Строка 1:
 +
'''Актуально для версии 2.9'''
 +
 +
[[Категория:Модуль Каталог]]
 +
 +
Иногда у каталога появляется больше одного уровня вложенности и тогда на страницах промежуточных разделов никакие товары не выводятся, потому как они находятся на уровень ниже. Например есть каталог с 3 уровнями вложенности:
 +
 +
<source lang="text">
 +
Каталог (1 уровень)
 +
:Раздел (2 уровень)
 +
::Под-раздел (3 уровень)
 +
:::Товар (4 уровен)
 +
:::Товар
 +
:::Товар
 +
</source>
 +
 +
При использовании стандартных макросов на странице Раздела (2 уровень вложенности) никакой информации выводится не будет, что не очень красиво и может сбить пользователя с толку, туда ли он двигается.
 +
Для вывода товаров рекурсивно(то есть по всем уровням вложенности начиная с выбранного раздела) мы создадим отдельный шаблон вывода товаров в зависимости от уровня вложенности и выбранного раздела. В папке \templates\demodizzy\xslt\modules\catalog\ создадим файл category-menu-view.xsl и скопируем туда содержимое файла category-view.xsl
 +
Теперь изменим шаблоны вывода объектов каталога:
 +
 
<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/getObjectsList/', page/@id, '////2/'))/udata" />
+
      <xsl:apply-templates select="document(concat('udata://catalog/getObjectsList/', page/@id, '////2/'))/udata" />
:::</xsl:template>
+
  </xsl:template>
 +
 
 +
  <xsl:template match="/result[@method = 'category'][count(/result/parents/page) = 2][@pageId='342']">
 +
      <xsl:apply-templates select="document('udata://catalog/getObjectsList/notemplate/342///5/')" />
 +
  </xsl:template>
  
:<xsl:template match="/result[@method = 'category'][count(/result/parents/page) = 2]">
+
  <xsl:template match="/result[@method = 'category'][count(/result/parents/page) = 3]">
::<xsl:apply-templates select="document('udata://catalog/getObjectsList/notemplate/342///5/')" />
+
      <xsl:apply-templates select="document(concat('udata://catalog/getObjectsList/', page/@id, '////2/'))/udata" />
:</xsl:template>
+
  </xsl:template>
 
:<xsl:template match="/result[@method = 'category'][count(/result/parents/page) = 3]">
 
::<xsl:apply-templates select="document('udata://catalog/search/{@id}///72')" />
 
::<xsl:apply-templates select="document('udata://catalog/getObjectsList/notemplate/10//////')" />
 
:</xsl:template>
 
 
</source>
 
</source>
 +
 +
Где [@pageId='342'] это ID страницы раздела каталога в структуре сайта. Вы можете посмотреть данный ID в модуле "Структура" наведя курсор на соответствующий раздел или в адресной строке, открыв необходимый раздел для редактирования.
 +
Если у Вас несколько таких разделов то Вы можете указать несколько шаблонов с разными ID.
 +
Условие атрибута [count(/result/parents/page) = 1] указывает на уровень вложенности, если у Вас больше 2 уровней, то Вы можете для каждого последующего уровня указать отдельный шаблон.

Текущая версия на 10:47, 1 июля 2013

Актуально для версии 2.9

Иногда у каталога появляется больше одного уровня вложенности и тогда на страницах промежуточных разделов никакие товары не выводятся, потому как они находятся на уровень ниже. Например есть каталог с 3 уровнями вложенности:

Каталог (1 уровень)
:Раздел (2 уровень)
::Под-раздел (3 уровень)
:::Товар (4 уровен)
:::Товар
:::Товар

При использовании стандартных макросов на странице Раздела (2 уровень вложенности) никакой информации выводится не будет, что не очень красиво и может сбить пользователя с толку, туда ли он двигается. Для вывода товаров рекурсивно(то есть по всем уровням вложенности начиная с выбранного раздела) мы создадим отдельный шаблон вывода товаров в зависимости от уровня вложенности и выбранного раздела. В папке \templates\demodizzy\xslt\modules\catalog\ создадим файл category-menu-view.xsl и скопируем туда содержимое файла 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>

   <xsl:template match="/result[@method = 'category'][count(/result/parents/page) = 2][@pageId='342']">
      <xsl:apply-templates select="document('udata://catalog/getObjectsList/notemplate/342///5/')" />
   </xsl:template>

   <xsl:template match="/result[@method = 'category'][count(/result/parents/page) = 3]">
      <xsl:apply-templates select="document(concat('udata://catalog/getObjectsList/', page/@id, '////2/'))/udata" />
   </xsl:template>

Где [@pageId='342'] это ID страницы раздела каталога в структуре сайта. Вы можете посмотреть данный ID в модуле "Структура" наведя курсор на соответствующий раздел или в адресной строке, открыв необходимый раздел для редактирования. Если у Вас несколько таких разделов то Вы можете указать несколько шаблонов с разными ID. Условие атрибута [count(/result/parents/page) = 1] указывает на уровень вложенности, если у Вас больше 2 уровней, то Вы можете для каждого последующего уровня указать отдельный шаблон.