UMIhelp
Разработка сайта на UMI.CMS => Шаблоны XSLT => Тема начата: 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?
-
Разбейте поиск на две части, ищете сначала поодной ветке потом по другой.
-
в любом случае разделяйте на 2 вызова (у макроса search_do есть возможность задать типы данных по которым будет идти поиск или раздел внутри которого будет идти поиск) или пишите кастомный вариант search_do который сразу будет выводить в xml тип данных (или еще лучше возвращать 2 блока для 2 типов данных которые вас интересуют)