Нужно вывести цену «10 000 ₽», а не 10000 или 10000.00. В Битрикс для этого есть готовые функции валютного модуля — не собирайте формат через number_format в каждом шаблоне.
Быстрый вариант: CurrencyFormat
<?php
$minPrice = 10000;
echo \CCurrencyLang::CurrencyFormat($minPrice, 'RUB');
// например: 10 000 ₽ (зависит от настроек валюты)
CCurrencyLang::CurrencyFormat($price, $currency) берёт шаблон из настроек валюты (разделитель тысяч, знак, позиция символа). Валюту лучше не хардкодить, а брать из каталога/заказа.
Цена товара из каталога
<?php
use Bitrix\Catalog\Product\Price;
// $priceValue — число, $currency — 'RUB' / 'USD' ...
$formatted = \CCurrencyLang::CurrencyFormat($priceValue, $currency);
// в шаблоне каталога часто уже есть:
// $arResult['ITEM']['ITEM_PRICES'][0]['PRINT_PRICE']
// — готовая отформатированная строка от компонента
Если пишете свой компонент — считайте числом, форматируйте один раз на выводе. В корзину и в расчёты скидок всегда кладите raw float/string числа, не «10 000 ₽».
Свой хелпер getFormattedPrice
Имеет смысл, если в проекте уже зовут getFormattedPrice() (как в старом сниппете). Положите в local/php_interface/init.php или в сервис модуля:
<?php
use Bitrix\Main\Loader;
function getFormattedPrice($price, string $currency = 'RUB'): string
{
if (!Loader::includeModule('currency')) {
return number_format((float)$price, 0, '.', ' ');
}
return (string)\CCurrencyLang::CurrencyFormat((float)$price, $currency);
}
$minPrice = 10000;
$minPrice = getFormattedPrice($minPrice); // "10 000 ₽"
SaleFormatCurrency (старый Sale)
<?php
if (\Bitrix\Main\Loader::includeModule('sale')) {
echo SaleFormatCurrency(1990.5, 'RUB');
}
Для витрины обычно достаточно CCurrencyLang::CurrencyFormat. SaleFormatCurrency оставляйте в контексте заказа/корзины, где уже подключён sale.
Типичные ошибки
- Форматировать до расчёта скидки — потом не сложить «10 000» как число.
- Забыть модуль
currencyна минимальной сборке. - Смешивать валюты без конвертации (
CCurrencyRates/ каталожные методы). - Хардкод «руб.» вместо настроек валюты — ломает мультивалютность.
Итого: храните число, на выводе — CCurrencyLang::CurrencyFormat (или тонкий getFormattedPrice вокруг него).
