UMIhelp

Разработка сайта на UMI.CMS => Шаблоны XSLT => Тема начата: sam от 08 Октября 2016, 21:24:06

Название: Беспл. доставка для определенной категории
Отправлено: sam от 08 Октября 2016, 21:24:06
Здравствуйте!

С помощью admin мы как-то делали следующее:
<xsl:text>Доставка: </xsl:text>
<xsl:choose>
<xsl:when test="document(concat('udata://emarket/price/', page/@id,'//0'))/udata/price/actual &gt;= 50000">
<xsl:text>бесплатно</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>190 руб.</xsl:text>
</xsl:otherwise>
</xsl:choose>
Для знатоков суть ясен - стоимость доставки 190 руб., а при стоимости товара от 50.000 руб., бесплатно.

На данный момент возникла потребность в том, чтобы сделать беспл.доставку для определенной категории товаров. Например, у нас есть категория "Диктофоны" (+3 подкатегории в ней) - надо, чтобы целиком для этой категории отображалась беспл.доставка (для всех позиций именно этой категории). У категории "Диктофоны" id = 5106, а id подкатегорий - 5107, 5108 и 5109 (+объекты в них со своими id).

Согласно примеру/коду выше, подскажите, как можно сделать проверку - "если Диктофоны и все его объекты, то бесплатная доставка"? Получается, что к этому коду надо ставить ещё одну проверку: 1. Все объекты - Доставка - 190 руб.; 2. Товары дороже 50.000 руб. - бесплатно; 3. Диктофоны - бесплатно. Знаю, что после ".../udata/price/actual &gt;= 50000" надо ставить || и прописать путь к разделу/категории "Диктофоны", а как этот путь указать, не знаю?! Буду признателен знатокам за подсказку!
Название: Re: Беспл. доставка для определенной категории
Отправлено: aghigay от 09 Октября 2016, 19:06:30
Нужно выяснить id типа данных Диктофоны и проверять как-то так:
|| page/@type-id = 'xxxx'
[code]
где xxxx - id типа данных Диктофоны
Название: Re: Беспл. доставка для определенной категории
Отправлено: sam от 09 Октября 2016, 21:39:40
Спасибо за отклик!  Если зайти в раздел "Диктофоны" в админ части, то id 5106 (.../edit/5106) - об этом id речь?!  Если нет, то просьба уточнить, про какой id?! Необходимо иметь в виду, что бесплатная доставка должна отображаться для всех объектов раздела "Диктофоны". Для всех остальных разделов и объектов проверка уже есть. И ещё, если в конце .../shop/dictaphones прописать .xml или .json, id этого раздела я увижу ведь? И какая конкретная строка с id должна меня интересовать, не подскажете?
Название: Re: Беспл. доставка для определенной категории
Отправлено: sam от 12 Октября 2016, 19:07:30
Не знаю, правильно ли я указал id раздела "Диктофоны" или нет (нашел, как написал в предыдущем сообщении - может не тот id, конечно), но такая проверка, как ниже, вызвала ошибку на сайте:
<xsl:when test="document(concat('udata://emarket/price/', page/@id,'//0'))/udata/price/actual &gt;= 50000 || page/@type-id = '5106'">
Проверка без || page/@type-id = '5106' работает. Может выражение "или" (||) как-то иначе надо прописать, или может проблема в id?! Может знатоки, ознакомившись сообщениями выше, подскажут, в чём моя ошибка - в каком конкретном месте?!
Название: Re: Беспл. доставка для определенной категории
Отправлено: aghigay от 13 Октября 2016, 22:37:59
Нужно смотреть на тип товара, а не на его ID или на ID раздела.
Атрибут будет type-id
Название: Re: Беспл. доставка для определенной категории
Отправлено: sam от 14 Октября 2016, 10:17:35
...
<page id="5106" parentId="36" link="/shop/dictaphones/" object-id="49118" type-id="77" type-guid="catalog-category">
<basetype id="54" module="catalog" method="category">Разделы каталога</basetype>
<name>Диктофоны</name>
...
Отсюда type-id="77" нам нужно, да - правильно я Вас понял?! Вернее "77" - т.е. этот id и надо прописать при проверке всего раздела "Диктофоны"?
Название: Re: Беспл. доставка для определенной категории
Отправлено: aghigay от 14 Октября 2016, 11:29:44
Если проверка идет на раздел, то есть если проверяется что родителем является раздел 5106 - то тогда можно проверять id 5106
Если проверка идет на товар, то есть что товар относится к какому-то типу, то есть что у товара действительно в карточке прописан конкретный тип "Диктофоны" - то тогда нужно проверять указанный тип через type-id, но тогда уже не раздела, а товара
Название: Re: Беспл. доставка для определенной категории
Отправлено: sam от 14 Октября 2016, 18:02:19
Проверка должна быть на категорию "Диктофоны", и соответственно все его объекты (во всех подкатегориях) должны выводить "доставка - бесплатно". А для других категорий, как уже писал выше, своя проверка уже есть. Исходя из этого, всё же, на что делать проверку - на page id="5106" или type-id="77"?
Название: Re: Беспл. доставка для определенной категории
Отправлено: aghigay от 14 Октября 2016, 18:03:26
parents/page/@id
Название: Re: Беспл. доставка для определенной категории
Отправлено: sam от 14 Октября 2016, 19:14:19
Ни одна из проверок ниже не работает - видимо я что-то делаю неправильно. Вопрос - что?!
<xsl:when test="document(concat('udata://emarket/price/', page/@id,'//0'))/udata/price/actual &gt;= 50000 || parents/page/@id = '5106'">
<xsl:when test="document(concat('udata://emarket/price/', page/@id,'//0'))/udata/price/actual &gt;= 50000 || page/@type-id = '77'">
Название: Re: Беспл. доставка для определенной категории
Отправлено: aghigay от 14 Октября 2016, 19:23:23
Ваше неправильное действие - это тыканье наугад. Можно еще 10 вариантов подобрать, которые тоже не будут работать.
Разберитесь с XPath и все поймете.

Все, с чем вы работаете и что вы делаете должно откуда-то появиться. Видимо в вашем случае ни "parents/page/@id", ни "page/@type-id" не содержит нужных вам данных. Раз это так, то для начала нужно найти эти данные. А уже потом следует обращаться к ним правильным образом.
Название: Re: Беспл. доставка для определенной категории
Отправлено: sam от 14 Октября 2016, 20:34:36
Спасибо за критику! Написали бы, чтобы я вместо "||" написал "or" - в этом случае ошибки нет. Но, проверка всё равно не работает.

XML раздела "Диктофоны" ниже:
...
<parents>
<page id="36" parentId="0" link="/shop/" is-active="1" object-id="480" type-id="77" type-guid="catalog-category" update-time="1378322097" alt-name="shop" xlink:href="upage://36">
<basetype id="54" module="catalog" method="category">Разделы каталога</basetype>
<name>Каталог</name>
</page>
</parents>
<page id="5106" parentId="36" link="/shop/dictaphones/" is-visible="1" is-active="1" object-id="49118" type-id="77" type-guid="catalog-category" update-time="1446027586" alt-name="dictaphones">
<basetype id="54" module="catalog" method="category">Разделы каталога</basetype>
<name>Диктофоны</name>
...

Если нетрудно, чтобы я не тыкал куда не надо, код проверки можете продемонстрировать (XML с различными id выше)?
Название: Re: Беспл. доставка для определенной категории
Отправлено: sam от 14 Октября 2016, 23:49:37
Можете меня критиковать, но думаю, что надо протестировать такую проверку:
<xsl:when test="(document(concat('udata://emarket/price/', page/@id,'//0'))/udata/price/actual &gt;= 50000) or (/result/parents/page[@type-id='77'])">
Название: Re: Беспл. доставка для определенной категории
Отправлено: aghigay от 15 Октября 2016, 01:49:59
Такая проверка (/result/parents/page[@type-id='77']) говорит - если среди родительских страниц существует страница, у которой атрибут type-id равен 77. Чтобы такую проверку делать нужно бы для начала проверить, а есть вообще атрибут такой у страницы?
Второе, что следовало бы проверить, не является ли 77 типом данных "Раздел каталога" и не подходит ли под это тогда любой раздел, который только попадется на пути?

Ну и в итоге получится, что нужно все-таки делать все верно:
- or вместо ||
- /result в начале, дабы указать откуда брать parents
- @id=5106, как раздел каталога Диктофоны

3 этих условия работают одновременно.
Название: Re: Беспл. доставка для определенной категории
Отправлено: sam от 15 Октября 2016, 12:12:05
Ну вот, видите, я опять неправ. Поправьте мой код, пожалуйста,чтобы проверка сработала - XML выше со всякими id.
Название: Re: Беспл. доставка для определенной категории
Отправлено: aghigay от 16 Октября 2016, 00:31:55
Чтобы поправить ваш код так, чтобы работало необходимо:
1. знать на какой странице/в каком макросе вы вызываете ваш код (чтобы понимать, с какими исходными данными можно работать)
2. знать как выглядит текущий <xsl:template, что он принимает в match и что может отдавать
3. какие глобальные переменные у вас объявлены
4. как выглядит структура вашего каталога

Это все данные, которые нужно проанализировать. К XSLT они имеют лишь косвенное отношение.
Если дадите хоть что-то из указанного - задачу можно попробовать решить гарантировано.

Без гарантии - пробуйте
<xsl:when test="(document(concat('udata://emarket/price/', page/@id,'//0'))/udata/price/actual &gt;= 50000) or (//parents/page[@id='5106'])">
Название: Re: Беспл. доставка для определенной категории
Отправлено: sam от 16 Октября 2016, 12:38:23
1. /modules/catalog/object-view.xsl (исходный файл)
2. почти стандартный файл (match без изменений)
3. спросили бы что попроще
4. раздел каталога (диктофоны (id=5106)) -> подразделы (диктофоны L (id=5107), M (id=5108), N (id=5109)) - раздел каталога выводит все объекты всех подразделов, а каждый подраздел выводит только свои объекты. как вы уже поняли, родителем всех подразделов и их объектов является 5106.

Ваш код ещё не пробовал. По данным от меня выше, возможно его еще поменяем.

P.S. Все подразделы и вроде объекты этих подразделов содержат в себе upage://5106 (кроме самого раздела "Диктофоны" (у него upage://36)) - может пробовать через этот upage://5106 сделать проверку?! Исходя из upage://5106, можете продемонстрировать код проверки?

P.P.S. Скриншот одного из подразделов "Диктофоны" прилагаю (XML), чтобы, может он Вам о чем-то скажет, как правильно сделать код проверки (см. вложение).
Название: Re: Беспл. доставка для определенной категории
Отправлено: sam от 17 Октября 2016, 19:58:23
Методом "проб и ошибок" нашёл рабочие коды для каждого из подразделов по-отдельности:
page/@parentId = '5107' //диктофоны "L"
page/@parentId = '5108' //диктофоны "M"
page/@parentId = '5109' //диктофоны "N"
Я так понимаю, что объявляется, что если у объекта родителем является 'ХХХХ', то "доставка - бесплатно".

У этих подразделов родителем является '5106' - надо, чтобы проверка была именно по этому @parentId.

Согласно логике трёх рабочих кодов выше (для их родителя '5106') должен работать код ниже, но не работает:
parents/page/@id = '5106'
Почему?! Что не так в моих действиях?!
Название: Re: Беспл. доставка для определенной категории
Отправлено: aghigay от 17 Октября 2016, 21:21:06
Потом что ваш "стандартный match" содержит какой-то элемент. И если этот элемент result и если в этом резалте есть parents - то тогда, возможно, это будет работать.

А если этот элемент, например, page, то вы ищите сочетание page/parents/page/@id. А есть такое сочетание в ваших данных?
Название: Re: Беспл. доставка для определенной категории
Отправлено: sam от 17 Октября 2016, 21:48:02
result объектов содержит meta, user, parents и page (см. XML выше). Согласно рабочим кодам выше, обращение к parentId из page. А надо, чтобы обращение было к parents (содержит три page - второй page с id='5106'; первый page первый уровень каталога, а третий page подразделы раздела диктофоны) - именно ко второму page с id 5106 и хочу я обратиться. Логика моего кода верна, но он не работает. Там нет порядка page/parents/page/@id (parents содержит три page (см. чуть выше), а page который за пределами parents НЕ содержит в себе parents с page). Пожалуйста, см скриншот XML/его код выше. То, что я описал выше, Вы там и увидете. Помогите добить эту проверку, пожалуйста.

P.S. Интересно, логичный это код - parents/page[last()]/@parentId='5106'?! Просто parents ведь содержит три page, а у третьего последнего page (подраздел) родитель и есть parentId '5106' (раздел диктофоны)?! Поправьте меня, если я не прав.
Название: Re: Беспл. доставка для определенной категории
Отправлено: aghigay от 17 Октября 2016, 22:05:51
Утверждение "Логика верна" противоречит утверждению "код не работает". Подумайте об этом
Название: Re: Беспл. доставка для определенной категории
Отправлено: aghigay от 17 Октября 2016, 22:32:13
К сожалению, вам придется сломать себе мозг, чтобы понять как устроена логика работы XSLT. А потом придется взять, и собрать этот мозг обратно. Так было у всех, будет и у вас.

Условие проверяет не то, что какой-то конкретный page имеет какой-то конкретный атрибут @id, а то, что существует page с атрибутом @id, равном тому, что нужно вам. В этом разница.

Если вы поймете это, то поймете, что под ваше условие подойдет любой объект, как угодно вложенный в ваш раздел: хоть на 3 уровня, хоть на 10 вглубь.

Ну и еще вам следует понять, что "parents/page/@id" - это относительный "адрес"  вашего объекта. А /result/parents/page/@id - абсолютный. И вы упорно пользуетесь относительным, не зная в каком именно контексте в данный момент вы находитесь. А относительный делает что? Берет ваш math и прибавляет то, что у вас есть.
Название: Re: Беспл. доставка для определенной категории
Отправлено: sam от 18 Октября 2016, 01:01:37
В object-view.xsl в самом начале match = /result[@module = 'catalog' and @method = 'object'] - примерно так (сейчас я не могу исходник посмотреть, так как файла под рукой нет (не за компом уже)). Последующий match = 'udata://' (вроде так, если память мне не изменяет).

Относительно того, что в начале надо result прописать, возможно Вы правы (не люблю спорить, тем более с асами/профи своего дела).

Резюмируя все Ваши и мои сообщения (особенно самые последние из них), я пока остановлюсь на таком варианте кода (его следует ещё протестировать):
/result/parents/page[last()]/@parentId='5106'
Могу обосновать этот код - result содержит в себе parents, а у parents есть три page, последний из которых (page[last()]) как раз таки и содержит parentId='5106', который говорит о том, что у объекта родителем является именно этот последний page с таким-то id. Теперь главное, чтобы такой код сработал для моей проверки.

P.S. Возможно, когда в коде не было last(), система думала о том, к какому из page обратиться, и это не смотря на то, что я явно указывал @id (а их там целых три - у каждого уровня page свой id)?! Впрочем тестирование расставит все точки над И, я так думаю. Посмотрим.
Название: Re: Беспл. доставка для определенной категории
Отправлено: aghigay от 18 Октября 2016, 01:20:22
Господи, ну почему вы не видите очевидных вещей? Что за теории заговоров "возможно, система думала". Система ничего не думает. Система берет ваше выражение и пробует его воткнуть в ваши данные. Если может найти соответствие - то выражение истинное. Если нет - выражение ложное.

Вы исправили 2 момента:
1. сделали обращение от корня (наконец-то)
2. дописали хрень (что за бред написан в выражении?) Вы хоть пробовали сами логически прочитать что там написано?
/result/parents/page[last()]/@parentId='5106'
найти все страницы (page) которые являются последними в наборе страниц ([last()]), лежат внутри только внутри тега parents, который, в свою очередь лежит внутри тега result. Затем взять у этой найденной страницы атрибут родителяИд (@parentId) и сравнить его с 5106. Результат - true/false. Нахрена такая сложность?

При структуре:
каталог (id = 3, parentId = 0)
-- диктофоны (id = 5106, parentId = 3)
---- диктофоны касетные (id = 112255, parentId = 5106)
------ диктофон 1 (id = 11225512, parentId = 112255)
Такое сработает.
А при структуре
каталог (id = 3, parentId = 0)
-- диктофоны (id = 5106, parentId = 3)
---- диктофон 1 (id = 11225512, parentId = 5106)
Вы пролетите как фанера над Парижем.

Вот правильный результат:
/result/parents/page/@id='5106'
Название: Re: Беспл. доставка для определенной категории
Отправлено: sam от 18 Октября 2016, 02:07:39
Я надеюсь, мой скриншот XML Вы смотрели (прикреплял к одному из последних сообщений). Там есть структура нашего каталога.
Название: Re: Беспл. доставка для определенной категории
Отправлено: aghigay от 18 Октября 2016, 02:20:02
Ага, смотрю. Ну и какой же page внутри вашего тега parents имеет атрибут parentId равный 5106?
Название: Re: Беспл. доставка для определенной категории
Отправлено: aghigay от 18 Октября 2016, 02:21:09
Если что, это был риторический вопрос. Правильный ответ - никакой. И вы огребли ровно то, что я описал в своем примере.
Название: Re: Беспл. доставка для определенной категории
Отправлено: sam от 18 Октября 2016, 02:36:30
Последовательность (result/):
1. parents page id=36 parentId=0 (каталог)
2. parents page id=5106 parentId=36 (раздел каталога)
3. parents page id=5109 parentId=5106 (подраздел каталога)
4. page id=5110 parentId=5109 (объект каталога - этот page за пределами parents (вспомните рабочий код - page/@parentId='5109'))
К третьей строке, подразделу каталога я и хочу достучаться (parentId=5106), точнее ко второму page/@id, через @parentId третьего.

P.S. Предыдущий XML был не из страницы объекта каталога, а из подраздела. Это моя ошибка. Извиняюсь!

P.P.S. /result/parents/page[last()]/@parentId='5106' - увы и такой код при структуре ниже тоже не работает!
XML из страницы объекта, где и должна работать сама проверка:
<result module="catalog" method="object" pageId="5110">
<meta>
<keywords>...</keywords>
<description>...</description>
</meta>
<user .../>
<parents>
<page id="36" parentId="0" type-id="77">
<basetype id="54" module="catalog" method="category">Разделы каталога</basetype>
<name>Каталог</name>
</page>
<page id="5106" parentId="36" type-id="77">
<basetype id="54" module="catalog" method="category">Разделы каталога</basetype>
<name>Диктофоны</name>
</page>
<page id="5109" parentId="5106" type-id="77">
<basetype id="54" module="catalog" method="category">Разделы каталога</basetype>
<name>Диктофоны L</name>
</page>
</parents>
<page id="5110" parentId="5109" type-id="177">
<basetype id="55" module="catalog" method="object">Объекты каталога</basetype>
<name>Диктофон L - название диктофона</name>
...
</page>
</result>
Эта загадка для меня так и остаётся не разгаданной. Я в тупике - как быть не знаю уже?!
Название: Re: Беспл. доставка для определенной категории
Отправлено: sam от 18 Октября 2016, 13:50:04
Я вспомнил, почему не использую абсолютный "адрес" (/result/parents/page/@...) - потому что такой "адрес" не работает - пытался по всячески, но все мои попытки увенчались неудачей. По этому, в рабочих кодах выше относительные "адреса" (page/@...).

Так как мне никак не удаётся достучаться до прародителя объекта каталога, исходя из логики рабочих кодов, я решил посмотреть, какой же @type-id у объекта каталога /result/page. И выяснил, что @type-id = '177' у объекта каталога (/result/page/@type-id). Проверил, что в других разделах этот @type-id другой - только у "Диктофонов" он '177'. Решил сделать проверку, и она сработала, только не при абсолютном "адресе" (/result/page/@type-id), а при "относительном" (page/@type-id). Рабочий код ниже:
Код проверки раздела "Диктофоны":
page/@type-id = '177'

Код проверки полный - рабочий:
<xsl:when test="(document(concat('udata://emarket/price/', page/@id,'//0'))/udata/price/actual &gt;= 50000) or (page/@type-id = '177')">
Буду проверять дальше, нет ли никаких изъянов у такого кода проверки. Буду крайне признателен за опровержение такого когда. Возможно, исходя из логики последнего рабочего кода, Вы предложите что-то своё (именно так, код не сработал /result/page/@type-id='177').

P.S. aghigay, изначально Вы так и предлагали мне сделать (см. первое своё сообщение), только я никак @type-id не мог находить для раздела "Диктофоны". И еще, обратите там внимание на то, что и Вы мне там писали код с относительным "адресом", а не абсолютным. Если бы изначально я нашел, что @type-id у раздела "Диктофоны" 177, за пору сообщений решилась бы задача. Так что, Ваша помощь и подсказки подтолкнули меня искать, найти и сделать правильный код проверки.
Название: Re: Беспл. доставка для определенной категории
Отправлено: aghigay от 18 Октября 2016, 15:45:43
Гыгыгы :-) Мне вот интересно, сколько еще нужно времени чтобы вы наконец нашли в моих ответах правильный вариант, который я уже дважды написал?
Название: Re: Беспл. доставка для определенной категории
Отправлено: sam от 18 Октября 2016, 22:00:55
В продолжение предыдущей задачи хочу вывести рекламный баннер через xsl:if (category-view.xsl), тоже не могу. Баннер хочу вывести в самом разделе "Диктофоны", и в трёх его подразделах. В разделе и подразделах вложенность /result/page. Для раздела пробовал через page/@id='5106', а для подразделов через page/@parentId='5106', ничего не смог вывести в итоге нигде, в т.ч. и с абсолютным "адресом" (/result/page/@id='5106'). Почему?
Название: Re: Беспл. доставка для определенной категории
Отправлено: sam от 18 Октября 2016, 23:01:59
XML раздела Диктофоны:
<result module="catalog" method="category" pageId="5106">
   <parents>...</parents>
   <page id='5106' parentId='36' type-id='77'>
       ...
   </page>
</result>
XML одного из подразделов - Диктофоны L:
<result module="catalog" method="category" pageId="5109">
   <parents>...</parents>
   <page id='5109' parentId='5106' type-id='77'>
       ...
   </page>
</result>
Вот для раздела и подраздела выше не могу сделать и проверку, чтобы вывести в них баннер, о чём писал в предыдущем своём сообщении.

Вызов хочу сделать в category-view.xsl внутри вот этого template:
<xsl:template match="udata[@method = 'getObjectsList'][total]">
   ... //вот здесь, чтобы в самом начале страницы выводился баннер
</xsl:template>
Название: Re: Беспл. доставка для определенной категории
Отправлено: sam от 19 Октября 2016, 18:49:46
Я всё же добился своего, и мне удалось сделать так, чтобы только в разделе "Диктофоны" и в трёх его подразделах выводился баннер. В других разделах и подразделах этого баннера нет, как я и хотел сделать. Рабочий код проверки выглядит так:
<xsl:if test="document(concat('upage://', $document-page-id))/udata/page/@id = '5106' or document(concat('upage://', $document-page-id))/udata/page/@parentId = '5106'">
Здесь баннер // если раздел каталога равен "Диктофоны" или родитель равен раздел "Диктофоны"
</xsl:if>
Название: Re: Беспл. доставка для определенной категории
Отправлено: aghigay от 19 Октября 2016, 19:11:00
Гыгыгы

условие
document(concat('upage://', $document-page-id))/udata/page/@id = '5106'
равносильно условию
$document-page-id = '5106'

А второе условие прямо повторяет то, что написано мною выше, только делает дополнительный запрос в ЮМИ

Название: Re: Беспл. доставка для определенной категории
Отправлено: sam от 20 Октября 2016, 10:21:23
После критики со стороны aghigay, я решил обновить свой код проверки. Теперь он выглядит так:
<xsl:variable name="document-page-parentId" select="document(concat('upage://', $document-page-id))/udata/page/@parentId"/>
<xsl:if test="$document-page-id = '5106' or $document-page-parentId = '5106'">
Здесь баннер // если раздел каталога равен "Диктофоны" или родитель равен раздел "Диктофоны"
</xsl:if>
aghigay, спасибо за помощь!

P.S. Для меня так и остаётся загадкой, почему я так и не смог достучаться до нужных мне id через /result/page/@id='5106' or /result/parents/page/@id='5106'?!...
Название: Re: Беспл. доставка для определенной категории
Отправлено: admin от 20 Октября 2016, 23:56:09
Вы не смогли достучаться до /result/page/@id='5106' , потому что вы работали в шаблоне
<xsl:template match="udata[@method = 'getObjectsList'][total]">
   ... //вот здесь, чтобы в самом начале страницы выводился баннер
</xsl:template>
Этот шаблон обрабатывал xml, который вернул вызов макроса udata://catalog/getObjectsList
И в этом xml отсутствуют теги
<result module="catalog" method="category" pageId="5106">
   <parents>...</parents>
   <page id='5106' parentId='36' type-id='77'>
       ...
   </page>
</result>

Поэтому, работая в шаблонах, которые обрабатывают xml появившиеся в результате вызовов каких-то макросов ("udata://...") для доступа к данным из изначального xml (с информацией о текущей страницы <result>...</result>) используют глобальные переменные.
Например $document-page-id (определяется в файле ~/xslt/default.xsl). В этом же файле можно определить глобальную переменную со всеми родителями
<xsl:variable name="parents" select="result/parents" />
В итоге, ваш шаблон будет выглядеть так (без вызова variable $document-page-parentId, так как при этом вы делаете лишний upage запрос :
<xsl:if test="$document-page-id = '5106' or $parents/page/@id = '5106'">
Здесь баннер // если раздел каталога равен "Диктофоны" или родитель равен раздел "Диктофоны"
</xsl:if>
Название: Re: Беспл. доставка для определенной категории
Отправлено: sam от 21 Октября 2016, 10:32:17
admin, безумно не хватало Вашей помощи! Спасибо, что откликнулись!
Сделал так - в файл ~/xslt/default.xsl добавил, почти, как Вы написали:
<xsl:variable name="parents-page-id" select="result/parents/page/@id" />
И после этого, уже отредактировал код в ~xslt/modules/catalog/category-view.xsl:
<xsl:if test="$document-page-id = '5106' or $parents-page-id = '5106'">
Здесь баннер // если раздел каталога равен "Диктофоны" или родитель равен раздел "Диктофоны"
</xsl:if>
Благодарю!