Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”

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

*

sam

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

Прошу подсказать: хочу сделать старую зачеркнутую цену рядом с ценой без использования скидочных механизмов, т.е. в Шаблоне данных (Тип данных -> Объекты каталога) в ценовые свойства добавляю новое поле с идентификатором "old_price", получаю в объектах это пустое поле (тип: строка/цена), дальше в объекте вручную ввожу произвольную цену и пробую вызвать инфо. из этого блока через <xsl:value-of select="//property[@name = 'old_price']/value/item/@name" /> в object-view.xsl, а информация/значение не выводиться на сайт?!

Почему? Что не так делаю?!

Заранее спасибо за помощь!

P.S. Суть в том, чтобы на сайте сделать блок с двумя ценами, одна зачеркнутая, а другая реальная - поля заполняются вручную при обновлении цен на товары (если, например, предыдущая цена была дороже настоящей, в старые вручную переносим предыдущую цену и зачеркиваем, а в поле цена вписываем уже актуальную новую цену).
Жизнь слишком коротка, чтобы выучить и знать всё на свете. Тем более, что мир быстро меняется, и технологии за ним тоже. Но это не повод, чтобы перестать учиться к чему-то новому. "Век живи - век учись!" Иначе жизнь будет прожита без пользы, как для себя, так и для окружающих.

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Зачеркнутая цена в объектах каталога
« Ответ #1 : 07 Ноября 2014, 21:00:21 »
Если вы создали поле для старой цены, оно явно имеет тип данных либо числовое, либо число с точкой, либо строка. Во всех случаях, при выводе значений такого поля вам нужен вызов вида
<xsl:value-of select="//property[@name = 'old_price']/value" />

А приведенный вами вызов, больше подходит для полей типа "выпадающий список".

*

sam

  • ***
  • 216
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
Re:Зачеркнутая цена в объектах каталога
« Ответ #2 : 07 Ноября 2014, 21:54:11 »
Спасибо! Это вроде азы, а я так и не догадался убрать лишнее после value.

Может еще подскажите, как сделать, чтобы вывести разницу в цене, т.е. "старая цена - новая цена = разница в цене" (<xsl:value-of select="//property[@name = 'old_price']/value" /> минус <xsl:apply-templates select="document(concat('udata://emarket/price/', page/@id,'//0'))" /> = разница в цене)?
Можно ведь это прописать каким-то одним xsl-вызовом?

И еще, <xsl:value-of select="//property[@name = 'old_price']/value" /> можно сделать, чтобы цена выводилась по формату 99 999. Просто не знаю, как здесь заключить ее в нужный формат.

И последнее, делаю проверку на заполнение поля "старая цена", а она не работает - в чём ошибка на Ваш взгляд (код ниже):

<xsl:choose>
<xsl:when test="value and not(value='')">     
<span>       
<xsl:value-of select="//property[@name = 'old_price']/value" />
<xsl:text> руб</xsl:text>
</span>
</xsl:when>
<xsl:otherwise>
<xsl:text>Цена:</xsl:text>
</xsl:otherwise>
</xsl:choose>


Без заключения в span проверка тоже не работает.

Пожалуйста, постарайтесь ответить на все три связанных друг с другом вопроса.
« Последнее редактирование: 07 Ноября 2014, 23:01:22 от sam »
Жизнь слишком коротка, чтобы выучить и знать всё на свете. Тем более, что мир быстро меняется, и технологии за ним тоже. Но это не повод, чтобы перестать учиться к чему-то новому. "Век живи - век учись!" Иначе жизнь будет прожита без пользы, как для себя, так и для окружающих.

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Зачеркнутая цена в объектах каталога
« Ответ #3 : 08 Ноября 2014, 01:18:27 »
xslt это может
<xsl:variable name="old_price" select="//property[@name = 'old_price']/value" />
<xsl:variable name="new_price" select="document(concat('udata://emarket/price/', page/@id,'//0'))/udata/price/actual" />
<xsl:variable name="discount_value" select="$old_price - $new_price" />

разница цен: <xsl:value-of select="$discount_value" />

*

sam

  • ***
  • 216
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
Re:Зачеркнутая цена в объектах каталога
« Ответ #4 : 08 Ноября 2014, 01:33:00 »
Цитировать
xslt это может
Код:
<xsl:variable name="old_price" select="//property[@name = 'old_price']/value" />
<xsl:variable name="new_price" select="document(concat('udata://emarket/price/', page/@id,'//0'))/udata/price/actual" />
<xsl:variable name="discount_value" select="$old_price - $new_price" />

разница цен: <xsl:value-of select="$discount_value" />

Т.е., получается что <xsl:apply-templates select="document(concat('udata://emarket/price/', page/@id,'//0'))" /> я могу заменить на Ваш код <xsl:variable name="new_price" select="document(concat('udata://emarket/price/', page/@id,'//0'))/udata/price/actual" />.

Правильно ли я понимаю, что, если даже не будет старой цены, а только действующая одна цена, то она по этому вызову будет выводиться, а сама формула будет работать только при заполнении старой и новой цены, да?

А еще на два вопроса ответите, где формат цены и проверка (см. выше)?
Жизнь слишком коротка, чтобы выучить и знать всё на свете. Тем более, что мир быстро меняется, и технологии за ним тоже. Но это не повод, чтобы перестать учиться к чему-то новому. "Век живи - век учись!" Иначе жизнь будет прожита без пользы, как для себя, так и для окружающих.

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Зачеркнутая цена в объектах каталога
« Ответ #5 : 08 Ноября 2014, 04:59:09 »
Правильно ли я понимаю, что, если даже не будет старой цены, а только действующая одна цена, то она по этому вызову будет выводиться, а сама формула будет работать только при заполнении старой и новой цены, да?

А еще на два вопроса ответите, где формат цены и проверка (см. выше)?

<xsl:variable name="new_price" select="document(concat('udata://emarket/price/', page/@id,'//0'))/udata/price/actual" />
вытянет одну переменную, одним запросом, а код
<xsl:apply-templates select="document(concat('udata://emarket/price/', page/@id,'//0'))" /> обрабатывает весь блок применяя отдельный шаблон. Вам же нужно было только значение.

По поводу формата цены мы уже с вами обсуждали в какой-то теме недавно.

По поводу проверки, тестируйте или приводите пример, что делает что не работает.

*

sam

  • ***
  • 216
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
Re:Зачеркнутая цена в объектах каталога
« Ответ #6 : 08 Ноября 2014, 16:07:54 »
Проверка - примерный код уже приводил выше, повторюсь (см. ниже):

<xsl:choose>
<xsl:when test="value and not(value='')">     
<span>       
<xsl:value-of select="//property[@name = 'old_price']/value" />
<xsl:value-of select="concat(' ', @suffix)" />
</span>
</xsl:when>
<xsl:otherwise>
<xsl:text>Цена:</xsl:text>
</xsl:otherwise>
</xsl:choose>

Если заполнено поле старая цена, выводить ее, если нет, то выводить текст "Цена:".
-----
Расчет разницы в цене - а нельзя действующий код переделать?:

<xsl:apply-templates select="document(concat('udata://emarket/price/', page/@id,'//0'))" />

заменить на:

<xsl:variable name="new_price" select="document(concat('udata://emarket/price/', page/@id,'//0'))" />

Такой код сработает, или только предложенный Вами вариант должен быть?! Просто не везде будет заполнено поле "старая цена", и не везде нужен будет вычислительный расчет.
Жизнь слишком коротка, чтобы выучить и знать всё на свете. Тем более, что мир быстро меняется, и технологии за ним тоже. Но это не повод, чтобы перестать учиться к чему-то новому. "Век живи - век учись!" Иначе жизнь будет прожита без пользы, как для себя, так и для окружающих.

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Зачеркнутая цена в объектах каталога
« Ответ #7 : 08 Ноября 2014, 17:44:54 »
sam, вы можете использовать и комбинировать куски "форматирование числа", "вывод цены", "вывод старой цены", "высчитывание разницы" как угодна, все уже зависитот вашей фантазии

Цитировать
<xsl:choose>
   <xsl:when test="value and not(value='')">     
      <span>       
         <xsl:value-of select="//property[@name = 'old_price']/value" />
         <xsl:text> руб</xsl:text>
      </span>
   </xsl:when>
   <xsl:otherwise>
      <xsl:text>Цена:</xsl:text>
   </xsl:otherwise>
</xsl:choose>

в этом коде все написанно верно, но не факт, что там где вы его используете есть те переменные которые вы проверяете. То есть я не в курсе где вы вставляете этот код и есть ли там параметр value и что в нем может выводится, если в этом месте доступ к //property[@name = 'old_price']/value. Так что вопрос скорее к вам, где вы это выводите, какой xml вам там доступен и т.п. советую просто перепроверить все эти составляющие. Так как иначе проще залезть к вам на сайт, чем помочь вам советом. Уж слишком мног очего придется выспрашивать у вас.

P.S. проверьте каждый элемент (value, //property[@name = 'old_price']/value и т.п.) с которым вы работает, посмотрите, что там за значения бывают, а потом уже смотрите как из них формируется выражение для логической проверки. Так и выясните в чем сложность.

*

sam

  • ***
  • 216
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
Re:Зачеркнутая цена в объектах каталога
« Ответ #8 : 08 Ноября 2014, 23:57:58 »
Вспомнил я проблему с проверкой и выводом иконок (лучшее/новинки), и воспользовался предложенным Вами в той теме вариантом при проверке value, и сделал следующий рабочий код (с использованием расчета разницы между старой и новой ценой) - <xsl:when test="document(concat('upage://', page/@id, '.old_price'))//value">:

<xsl:choose>
<xsl:when test="document(concat('upage://', page/@id, '.old_price'))//value">
<xsl:value-of select="format-number(//property[@name = 'old_price']/value, '#&#160;###,##','price')" />
<xsl:text> руб</xsl:text>
<xsl:text> (</xsl:text>
<xsl:value-of select="format-number($discount_value, '#&#160;###,##','price')" />
<xsl:text> руб)</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>Цена:</xsl:text>
</xsl:otherwise>
</xsl:choose>


Главное, что все работает. Спасибо, что подтолкнули на поиск решения проблемы самостоятельно! За уделённое время на мои вопросы отдельное спасибо! Думаю, что тема закрыта.
« Последнее редактирование: 09 Ноября 2014, 02:30:44 от sam »
Жизнь слишком коротка, чтобы выучить и знать всё на свете. Тем более, что мир быстро меняется, и технологии за ним тоже. Но это не повод, чтобы перестать учиться к чему-то новому. "Век живи - век учись!" Иначе жизнь будет прожита без пользы, как для себя, так и для окружающих.

*

sam

  • ***
  • 216
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
Re:Зачеркнутая цена в объектах каталога
« Ответ #9 : 10 Апреля 2015, 14:08:24 »
Здравствуйте! Возник вопрос, как уже писали выше, разницу между новой и старой ценой в числовом выражении мы выводить научились, а вот как можно получить эту-же разницу в процентном соотношении? Например, нужно получить следующее (формула):

87000 * 100 / 950000 = 9,16%

Делаю я это так, но не работает?! Как подправить, чтобы сработало?:
<xsl:variable name="discount_percent" select="$new_price * 100 / $old_price" />
<xsl:value-of select="format-number(discount_percent, '#&#160;###,##','price')" />

Заранее спасибо за помощь!
« Последнее редактирование: 10 Апреля 2015, 15:04:06 от sam »
Жизнь слишком коротка, чтобы выучить и знать всё на свете. Тем более, что мир быстро меняется, и технологии за ним тоже. Но это не повод, чтобы перестать учиться к чему-то новому. "Век живи - век учись!" Иначе жизнь будет прожита без пользы, как для себя, так и для окружающих.

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Зачеркнутая цена в объектах каталога
« Ответ #10 : 10 Апреля 2015, 15:13:04 »
87000 * 100 / 950000 = 9,16%

Делаю я это так, но не работает?! Как подправить, чтобы сработало?:
<xsl:variable name="discount_percent" select="$new_price * 100 / $old_price" />
<xsl:value-of select="format-number(discount_percent, '#&#160;###,##','price')" />

вместо символа деления "/" используйте "div"

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Зачеркнутая цена в объектах каталога
« Ответ #11 : 10 Апреля 2015, 18:29:53 »
пример чего? у вас уже есть код, у вас была ошибка в знаках, в беседе прояснилось в чем именно.
Или вы имеет в виду написать ваш кусочек кода с исправлением?

<xsl:variable name="discount_percent" select="$new_price * 100 div $old_price" />
<xsl:value-of select="format-number(discount_percent, '#&#160;###,##','price')" />

*

sam

  • ***
  • 216
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
Re:Зачеркнутая цена в объектах каталога
« Ответ #12 : 10 Апреля 2015, 18:40:10 »
admin, спасибо! не сразу понял, что "/" надо просто заменить на "div". У меня была ошибка при вычисление процента (в самой формуле расчета), подправил так, буду пробовать реализовать:

<xsl:variable name="discount_value" select="$new_price - $old_price" />
<xsl:variable name="discount_percent" select="$discount_value * 100 div $old_price" />
<xsl:value-of select="format-number($discount_percent, '#&#160;###,##','price')" />
Жизнь слишком коротка, чтобы выучить и знать всё на свете. Тем более, что мир быстро меняется, и технологии за ним тоже. Но это не повод, чтобы перестать учиться к чему-то новому. "Век живи - век учись!" Иначе жизнь будет прожита без пользы, как для себя, так и для окружающих.