для этого есть спец функция у xslt, которая преобразует число в определенный формат.
Конкретно для вашего случая подойдет такой код:
- надо прописать до описание всех template такую консткурцию (скорее всего в файл /templates/demodizzy/xslt/default.xsl)
<xsl:decimal-format name="price" decimal-separator="," grouping-separator=" "/>
- затем при выводе цены, например из узла actual (шаблон для вывода цены /templates/demodizzy/xslt/modules/catalog/price.xsl) указать преобразование <xsl:value-of select="format-number(actual, '# ###,##','price')" />
-надо прописать до описание всех template такую консткурцию (скорее всего в файл /templates/demodizzy/xslt/default.xsl)
Вставил сразу после xsl:output...
- затем при выводе цены, например из узла actual (шаблон для вывода цены /templates/demodizzy/xslt/modules/emarket/price.xsl) указать преобразование
Содержимое price.xsl - раньше было так:
<xsl:template match="udata[@method = 'price']">
<xsl:apply-templates select="price" />
</xsl:template>
<xsl:template match="total-price">
<xsl:value-of select="concat(@prefix, ' ', actual, ' ', @suffix)" />
</xsl:template>
<xsl:template match="price" mode="discounted-price">
<xsl:value-of select="concat(@prefix, ' ', actual, ' ', @suffix)" />
</xsl:template>
<xsl:template match="price">
<xsl:value-of select="concat(@prefix, ' ', original, ' ', @suffix)" />
</xsl:template>
<xsl:template match="price[not(original) or original = '']">
<xsl:value-of select="concat(@prefix, ' ', actual, ' ', @suffix)" />
</xsl:template>
Сейчас содержимое сделал таким - работает:
<xsl:template match="udata[@method = 'price']">
<xsl:apply-templates select="price" />
</xsl:template>
<xsl:template match="total-price">
<xsl:value-of select="concat(@prefix, ' ')" />
<xsl:value-of select="format-number(actual, '# ###,##','price')" />
<xsl:value-of select="concat(' ', @suffix)" />
</xsl:template>
<xsl:template match="price" mode="discounted-price">
<xsl:value-of select="concat(@prefix, ' ')" />
<xsl:value-of select="format-number(actual, '# ###,##','price')" />
<xsl:value-of select="concat(' ', @suffix)" />
</xsl:template>
<xsl:template match="price">
<xsl:value-of select="concat(@prefix, ' ')" />
<xsl:value-of select="format-number(original, '# ###,##','price')" />
<xsl:value-of select="concat(' ', @suffix)" />
</xsl:template>
<xsl:template match="price[not(original) or original = '']">
<xsl:value-of select="concat(@prefix, ' ')" />
<xsl:value-of select="format-number(actual, '# ###,##','price')" />
<xsl:value-of select="concat(' ', @suffix)" />
</xsl:template>
1. В корзине тоже всё работает, за исключением одного - при увеличении количества товаров (js) сумма меняется автоматически и формат сбрасывается.
Правильно ли я понимаю, что в basket.js надо вносить аналогичные правки, чтобы формат не менялся? Как это сделать?
2. В basket.xsl есть строка, которая тоже выводит сумму/цену без форматирования - код ниже, можете подсказать, как здесь применить форматирование?:
<xsl:template match="summary[amount > 0]" mode="basket">
<span>
<xsl:apply-templates select="amount" />
</span>
<xsl:text> &basket-items-text; </xsl:text>
<xsl:apply-templates select="price/@prefix" />
<xsl:apply-templates select="price/actual" />
<xsl:apply-templates select="price/@suffix" />
</xsl:template>
3. И надо ли в cart.xsl где-то вносить изменения, или там форматировать нечего?
P.S. В правом верхнем углу сайта корзина тоже без форматирования, тоже вроде basket.js выводит туда информацию из корзины?
В basket.js как можно задать такой-же формат?
1. В корзине тоже всё работает, за исключением одного - при увеличении количества товаров (js) сумма меняется автоматически и формат сбрасывается.
Правильно ли я понимаю, что в basket.js надо вносить аналогичные правки, чтобы формат не менялся? Как это сделать?
2. В basket.xsl есть строка, которая тоже выводит сумму/цену без форматирования - код ниже, можете подсказать, как здесь применить форматирование?:
<xsl:template match="summary[amount > 0]" mode="basket">
<span>
<xsl:apply-templates select="amount" />
</span>
<xsl:text> &basket-items-text; </xsl:text>
<xsl:apply-templates select="price/@prefix" />
<xsl:apply-templates select="price/actual" />
<xsl:apply-templates select="price/@suffix" />
</xsl:template>
3. И надо ли в cart.xsl где-то вносить изменения, или там форматировать нечего?
P.S. В правом верхнем углу сайта корзина тоже без форматирования, тоже вроде basket.js выводит туда информацию из корзины?
В basket.js как можно задать такой-же формат?
резюмирую:
- все что меняется через js, форматируйте средствами js
- везде где вам надо вывести форматированное значние на уровне xslt используйте
<xsl:value-of select="format-number(actual, '# ###,##','price')" />
где вместо actual нужно прописать путь к переменной, узлу или атрибуту, который содержит само число.
В каких шаблонах у вас требуется прописать форматирование не подскажу, так как это зависит от набора ваших шаблонов. Просмотрите все места где вы хотите вывести форматирование и найдите\измените все соответствующие xsl шаблоны.
А что делать в случае двух цен у товара, то есть ес ть актуальная цена, по которой товар и покупается и есть "старая" цена названием поля "old_price" и его типом "price" ?
В шаблоне объекта каталога данные выводятся так:
<xsl:value-of select="//property[@name='old_price']/value" />
и обрабатываются так:
<xsl:template match="property[@type='price']/value">
<xsl:value-of select="." />
</xsl:template>
?
Все точно также. Как только у вас есть число, которое вам надо вывести в определенном виде, подставляйте его как первый параметр к выше приведенному вызову. Например так
<xsl:value-of select="format-number(ваше_число_или_переменная_или_значение_из_xml , '# ###,##','price')" />
P.S. Не забывайте добавить в свой шаблон <xsl:decimal-format name="price" decimal-separator="," grouping-separator=" "/>
<xsl:value-of select="format-number(actual, '# ###,##','price')" />
В данном примере работает разделение десятков тысяч, то есть выход 10 _пробел_ 000 руб или 10 000 р.
А если цена товара 100 000 рублей ?
Я попробовал поискать в интернете по запросу decimal-separator из переменной
<xsl:decimal-format name="price" decimal-separator="," grouping-separator=" "/>
но мне всё про Delphi только попадаются страницы....
А если цена товара 100 000 рублей ?
Я попробовал поискать в интернете по запросу decimal-separator из переменной
<xsl:decimal-format name="price" decimal-separator="," grouping-separator=" "/>
но мне всё про Delphi только попадаются страницы....
попробуйте <xsl:value-of select="format-number(actual, '# ### ###,##','price')" />
А если цена товара 100 000 рублей ?
Я попробовал поискать в интернете по запросу decimal-separator из переменной
<xsl:decimal-format name="price" decimal-separator="," grouping-separator=" "/>
но мне всё про Delphi только попадаются страницы....
попробуйте <xsl:value-of select="format-number(actual, '# ### ###,##','price')" />
Попробовал и так тоже, но увы, в корзине товаров, где это в общем-то только и нужно ни чего не произошло, то есть по прежнему слитно сумма в 100000 рублей получается.
Вот этот самый шаблон в полный рост:
<xsl:template match="price[not(original) or original = '' or actual != '0']">
<xsl:value-of select="concat(@prefix, ' ')" />
<xsl:value-of select="format-number(actual, '# ### ###,##','price')" />
<span class="suffix">
<xsl:value-of select="concat(' ', @suffix)" />
</span>
</xsl:template>
</xsl:stylesheet>