Если вы создали поле для старой цены, оно явно имеет тип данных либо числовое, либо число с точкой, либо строка. Во всех случаях, при выводе значений такого поля вам нужен вызов вида
<xsl:value-of select="//property[@name = 'old_price']/value" />
А приведенный вами вызов, больше подходит для полей типа "выпадающий список".
Спасибо! Это вроде азы, а я так и не догадался убрать лишнее после 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 проверка тоже не работает.
Пожалуйста, постарайтесь ответить на все три связанных друг с другом вопроса.
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: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'))" />
Такой код сработает, или только предложенный Вами вариант должен быть?! Просто не везде будет заполнено поле "старая цена", и не везде нужен будет вычислительный расчет.
Вспомнил я проблему с проверкой и выводом иконок (лучшее/новинки), и воспользовался предложенным Вами в той теме вариантом при проверке 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, '# ###,##','price')" />
<xsl:text> руб</xsl:text>
<xsl:text> (</xsl:text>
<xsl:value-of select="format-number($discount_value, '# ###,##','price')" />
<xsl:text> руб)</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>Цена:</xsl:text>
</xsl:otherwise>
</xsl:choose>
Главное, что все работает. Спасибо, что подтолкнули на поиск решения проблемы самостоятельно! За уделённое время на мои вопросы отдельное спасибо! Думаю, что тема закрыта.
Здравствуйте! Возник вопрос, как уже писали выше, разницу между новой и старой ценой в числовом выражении мы выводить научились, а вот как можно получить эту-же разницу в процентном соотношении? Например, нужно получить следующее (формула):
87000 * 100 / 950000 = 9,16%
Делаю я это так, но не работает?! Как подправить, чтобы сработало?:
<xsl:variable name="discount_percent" select="$new_price * 100 / $old_price" />
<xsl:value-of select="format-number(discount_percent, '# ###,##','price')" />
Заранее спасибо за помощь!
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, '# ###,##','price')" />