UMIhelp

Разработка сайта на UMI.CMS => Шаблоны XSLT => Тема начата: EvgenyIvn от 04 Июня 2013, 21:19:18

Название: Временное дерево или др. решение
Отправлено: EvgenyIvn от 04 Июня 2013, 21:19:18
Здравствуйте!

Клиент попросил в результатах поиска выводить на странице сначала товары, а ниже страницы другого типа.
Макрос search_do возвращает данные в таком виде:
http://dev.docs.umi-cms.ru/spravochnik_makrosov_umicms/poisk_po_sajtu/search_search_do/#xslt-templating

Обрабатываю их примерно так:
<xsl:apply-templates select="items/item" />

Шаблон для обработки item:
<xsl:template match="item">
   <!-- здесь получаю страницу -->
   <xsl:variable name="item_page" select="document(concat('upage://', @id))/udata/page" />
      <!-- прежде чем выводить страницу, проверяю ее тип -->
      <xsl:if test="$item_page/basetype/@module='catalog' and $item_page/basetype/@method='object'">
         <!-- здесь хотелось бы знать индекс итема -->
         <!-- position() в данном случае не подойдет т.к. мы используем условие -->
   </xsl:if>
</xsl:template>

1. Мне нужно знать индексы _выводимых_ итемов, но position() в данном случае не будет работать т.к. мы используем условие. В обычном языке программирования я бы добавил переменную ItemIndex, но в XSLT нельзя переопределить значение переменной. Не пойму как быть в данном случае?

2. Читал, что в XSLT можно построить временное дерево и затем применить шаблоны к нему. В таком случае я бы построил свое дерево и вывел бы в него тип страницы для последующей обработки другими шаблонами.
Возможно ли такое в рамках UMI?
Название: Re:Временное дерево или др. решение
Отправлено: BaceH от 07 Июня 2013, 21:00:23
Разбейте поиск на две части, ищете сначала поодной ветке потом по другой.
Название: Re:Временное дерево или др. решение
Отправлено: admin от 16 Июня 2013, 02:10:55
в любом случае разделяйте на 2 вызова (у макроса search_do есть возможность задать типы данных по которым будет идти поиск или раздел внутри которого будет идти поиск) или пишите кастомный вариант search_do который сразу будет выводить в xml тип данных (или еще лучше возвращать 2 блока для 2 типов данных которые вас интересуют)