Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”
Добавление уже имеющихся объектов каталога в другие категории через дополнительн

Автор johnРаздел Шаблоны XSLT

Ответов: 14
Просмотров: 5296
Последний ответ 09 Июня 2015, 12:43:53
от admin
Вывод в фильтрах по каталогу значение справочника для конкретной категории

Автор AxiomateriaРаздел Шаблоны XSLT

Ответов: 1
Просмотров: 1287
Последний ответ 29 Мая 2015, 12:51:38
от admin
Как вывести в карточке товара название категории и ссылку на нее

Автор koroganРаздел Шаблоны TPL

Ответов: 1
Просмотров: 3281
Последний ответ 20 Июня 2013, 08:21:10
от admin
запрос SQL, как выбрать товары в заданной категории

Автор KTIРаздел Макросы UMI.CMS

Ответов: 1
Просмотров: 5458
Последний ответ 23 Апреля 2012, 15:33:34
от KTI
Определить виртуальную копию категории?

Автор muldyРаздел Custom макросы

Ответов: 1
Просмотров: 1876
Последний ответ 30 Октября 2013, 22:15:08
от admin

0 Пользователей и 1 Гость просматривают эту тему.

*

sam

  • ***
  • 216
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
Здравствуйте!

С помощью 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" надо ставить || и прописать путь к разделу/категории "Диктофоны", а как этот путь указать, не знаю?! Буду признателен знатокам за подсказку!
Жизнь слишком коротка, чтобы выучить и знать всё на свете. Тем более, что мир быстро меняется, и технологии за ним тоже. Но это не повод, чтобы перестать учиться к чему-то новому. "Век живи - век учись!" Иначе жизнь будет прожита без пользы, как для себя, так и для окружающих.

*

aghigay

  • *****
  • 611
  • +28/-3
  • Просто пытаюсь помочь. Иногда пинком
    • Просмотр профиля
    • umicms.me
Re: Беспл. доставка для определенной категории
« Ответ #1 : 09 Октября 2016, 19:06:30 »
Нужно выяснить id типа данных Диктофоны и проверять как-то так:
|| page/@type-id = 'xxxx'
[code]
где xxxx - id типа данных Диктофоны
Мой блог http://umicms.me

*

sam

  • ***
  • 216
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
Re: Беспл. доставка для определенной категории
« Ответ #2 : 09 Октября 2016, 21:39:40 »
Спасибо за отклик!  Если зайти в раздел "Диктофоны" в админ части, то id 5106 (.../edit/5106) - об этом id речь?!  Если нет, то просьба уточнить, про какой id?! Необходимо иметь в виду, что бесплатная доставка должна отображаться для всех объектов раздела "Диктофоны". Для всех остальных разделов и объектов проверка уже есть. И ещё, если в конце .../shop/dictaphones прописать .xml или .json, id этого раздела я увижу ведь? И какая конкретная строка с id должна меня интересовать, не подскажете?
« Последнее редактирование: 12 Октября 2016, 09:14:04 от sam »
Жизнь слишком коротка, чтобы выучить и знать всё на свете. Тем более, что мир быстро меняется, и технологии за ним тоже. Но это не повод, чтобы перестать учиться к чему-то новому. "Век живи - век учись!" Иначе жизнь будет прожита без пользы, как для себя, так и для окружающих.

*

sam

  • ***
  • 216
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
Re: Беспл. доставка для определенной категории
« Ответ #3 : 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?! Может знатоки, ознакомившись сообщениями выше, подскажут, в чём моя ошибка - в каком конкретном месте?!
« Последнее редактирование: 12 Октября 2016, 23:56:04 от sam »
Жизнь слишком коротка, чтобы выучить и знать всё на свете. Тем более, что мир быстро меняется, и технологии за ним тоже. Но это не повод, чтобы перестать учиться к чему-то новому. "Век живи - век учись!" Иначе жизнь будет прожита без пользы, как для себя, так и для окружающих.

*

aghigay

  • *****
  • 611
  • +28/-3
  • Просто пытаюсь помочь. Иногда пинком
    • Просмотр профиля
    • umicms.me
Re: Беспл. доставка для определенной категории
« Ответ #4 : 13 Октября 2016, 22:37:59 »
Нужно смотреть на тип товара, а не на его ID или на ID раздела.
Атрибут будет type-id
Мой блог http://umicms.me

*

sam

  • ***
  • 216
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
Re: Беспл. доставка для определенной категории
« Ответ #5 : 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 и надо прописать при проверке всего раздела "Диктофоны"?
Жизнь слишком коротка, чтобы выучить и знать всё на свете. Тем более, что мир быстро меняется, и технологии за ним тоже. Но это не повод, чтобы перестать учиться к чему-то новому. "Век живи - век учись!" Иначе жизнь будет прожита без пользы, как для себя, так и для окружающих.

*

aghigay

  • *****
  • 611
  • +28/-3
  • Просто пытаюсь помочь. Иногда пинком
    • Просмотр профиля
    • umicms.me
Re: Беспл. доставка для определенной категории
« Ответ #6 : 14 Октября 2016, 11:29:44 »
Если проверка идет на раздел, то есть если проверяется что родителем является раздел 5106 - то тогда можно проверять id 5106
Если проверка идет на товар, то есть что товар относится к какому-то типу, то есть что у товара действительно в карточке прописан конкретный тип "Диктофоны" - то тогда нужно проверять указанный тип через type-id, но тогда уже не раздела, а товара
Мой блог http://umicms.me

*

sam

  • ***
  • 216
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
Re: Беспл. доставка для определенной категории
« Ответ #7 : 14 Октября 2016, 18:02:19 »
Проверка должна быть на категорию "Диктофоны", и соответственно все его объекты (во всех подкатегориях) должны выводить "доставка - бесплатно". А для других категорий, как уже писал выше, своя проверка уже есть. Исходя из этого, всё же, на что делать проверку - на page id="5106" или type-id="77"?
Жизнь слишком коротка, чтобы выучить и знать всё на свете. Тем более, что мир быстро меняется, и технологии за ним тоже. Но это не повод, чтобы перестать учиться к чему-то новому. "Век живи - век учись!" Иначе жизнь будет прожита без пользы, как для себя, так и для окружающих.

*

aghigay

  • *****
  • 611
  • +28/-3
  • Просто пытаюсь помочь. Иногда пинком
    • Просмотр профиля
    • umicms.me
Re: Беспл. доставка для определенной категории
« Ответ #8 : 14 Октября 2016, 18:03:26 »
parents/page/@id
Мой блог http://umicms.me

*

sam

  • ***
  • 216
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
Re: Беспл. доставка для определенной категории
« Ответ #9 : 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'">
Жизнь слишком коротка, чтобы выучить и знать всё на свете. Тем более, что мир быстро меняется, и технологии за ним тоже. Но это не повод, чтобы перестать учиться к чему-то новому. "Век живи - век учись!" Иначе жизнь будет прожита без пользы, как для себя, так и для окружающих.

*

aghigay

  • *****
  • 611
  • +28/-3
  • Просто пытаюсь помочь. Иногда пинком
    • Просмотр профиля
    • umicms.me
Re: Беспл. доставка для определенной категории
« Ответ #10 : 14 Октября 2016, 19:23:23 »
Ваше неправильное действие - это тыканье наугад. Можно еще 10 вариантов подобрать, которые тоже не будут работать.
Разберитесь с XPath и все поймете.

Все, с чем вы работаете и что вы делаете должно откуда-то появиться. Видимо в вашем случае ни "parents/page/@id", ни "page/@type-id" не содержит нужных вам данных. Раз это так, то для начала нужно найти эти данные. А уже потом следует обращаться к ним правильным образом.
Мой блог http://umicms.me

*

sam

  • ***
  • 216
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
Re: Беспл. доставка для определенной категории
« Ответ #11 : 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 выше)?
Жизнь слишком коротка, чтобы выучить и знать всё на свете. Тем более, что мир быстро меняется, и технологии за ним тоже. Но это не повод, чтобы перестать учиться к чему-то новому. "Век живи - век учись!" Иначе жизнь будет прожита без пользы, как для себя, так и для окружающих.

*

sam

  • ***
  • 216
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
Re: Беспл. доставка для определенной категории
« Ответ #12 : 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'])">
Жизнь слишком коротка, чтобы выучить и знать всё на свете. Тем более, что мир быстро меняется, и технологии за ним тоже. Но это не повод, чтобы перестать учиться к чему-то новому. "Век живи - век учись!" Иначе жизнь будет прожита без пользы, как для себя, так и для окружающих.

*

aghigay

  • *****
  • 611
  • +28/-3
  • Просто пытаюсь помочь. Иногда пинком
    • Просмотр профиля
    • umicms.me
Re: Беспл. доставка для определенной категории
« Ответ #13 : 15 Октября 2016, 01:49:59 »
Такая проверка (/result/parents/page[@type-id='77']) говорит - если среди родительских страниц существует страница, у которой атрибут type-id равен 77. Чтобы такую проверку делать нужно бы для начала проверить, а есть вообще атрибут такой у страницы?
Второе, что следовало бы проверить, не является ли 77 типом данных "Раздел каталога" и не подходит ли под это тогда любой раздел, который только попадется на пути?

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

3 этих условия работают одновременно.
Мой блог http://umicms.me

*

sam

  • ***
  • 216
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
Re: Беспл. доставка для определенной категории
« Ответ #14 : 15 Октября 2016, 12:12:05 »
Ну вот, видите, я опять неправ. Поправьте мой код, пожалуйста,чтобы проверка сработала - XML выше со всякими id.
Жизнь слишком коротка, чтобы выучить и знать всё на свете. Тем более, что мир быстро меняется, и технологии за ним тоже. Но это не повод, чтобы перестать учиться к чему-то новому. "Век живи - век учись!" Иначе жизнь будет прожита без пользы, как для себя, так и для окружающих.