Формат цены — это не косметика, а часть модуля currency. От того, как заданы разделитель разрядов, число знаков после запятой и положение символа валюты, зависит, как цена выглядит на витрине, в корзине, в письмах и в печатных формах заказа. Настраивается это в одном месте, а действует по всему магазину.
Где живёт формат цены
Формат вывода задаётся не в шаблоне и не в свойствах товара, а в самой валюте. Идём в Магазин → Настройки → Валюты (модуль currency), открываем нужную валюту и переходим на языковую вкладку — например, Русский. Именно на этой вкладке лежат все параметры отображения, потому что формат зависит от языка интерфейса: одна и та же валюта может выводиться по-разному для русской и английской версий сайта.
Ключевые поля вкладки:
- Формат — шаблон вывода с плейсхолдером
#, куда подставляется число (например,# руб.или$#); - Десятичных знаков — сколько цифр показывать после запятой (обычно 2 или 0);
- Десятичный разделитель — символ дробной части (запятая или точка);
- Разделитель групп разрядов — символ между тысячами (пробел, точка или пусто);
- Скрывать нули в дробной части — убирать
,00у целых сумм.
b_catalog_currency_lang — по строке на каждый язык. Поэтому «непонятно откуда взявшийся» символ валюты почти всегда живёт именно там, а не в компоненте.Символ валюты и его положение
Положение символа определяет плейсхолдер # в поле «Формат». Слева от него — символ идёт перед числом, справа — после. Битрикс не имеет отдельной галочки «символ слева/справа»: вы просто пишете шаблон так, как нужно видеть цену.
| Значение поля «Формат» | Результат для 1250 |
|---|---|
# руб. | 1 250 руб. |
# ₽ | 1 250 ₽ |
$# | $1 250 |
# EUR | 1 250 EUR |
Символ рубля ₽ — это обычный Unicode-символ, его можно вставить прямо в поле «Формат». Если он отображается «квадратиком», проблема в шрифте темы, а не в настройке валюты. Между # и символом ставьте неразрывный пробел, чтобы цена не переносилась на две строки в узкой карточке товара.
Разделители разрядов и дробной части
Российский стандарт: разряды разделяются пробелом, дробная часть — запятой. То есть 1 250,50, а не 1,250.50 по-английски. Это задаётся двумя полями:
- Разделитель групп разрядов — ставим пробел. Технически рекомендуется неразрывный пробел, чтобы число не рвалось при переносе;
- Десятичный разделитель — ставим запятую.
Число знаков после запятой (Десятичных знаков) для рублёвого магазина обычно 2. Если товары продаются только целыми суммами, поставьте 0 — тогда копейки не будут показываться вовсе. Промежуточный вариант — оставить 2 знака, но включить «Скрывать нули в дробной части»: цена 1 250,00 покажется как 1 250, а 1 250,50 — как есть.
Как выводить цену в коде правильно
Чтобы формат применялся автоматически, цену нужно прогонять через API модуля валют, а не собирать строку руками. Основной метод — CurrencyFormat($price, $currency, $useTemplate = true):
CurrencyFormat(1250.5, 'RUB')вернёт готовую строку с символом и разделителями —1 250,50 руб.;- в D7 то же делает
\Bitrix\Currency\CurrencyManagerиCCurrencyLang::CurrencyFormat(); - компоненты каталога и корзины (
catalog.section,sale.basket.basket) уже возвращают отформатированную цену в полеPRINT_VALUE/PRICE_FORMATED.
Практическое правило: в шаблоне берите готовое PRINT_VALUE, а «сырое» число VALUE используйте только для расчётов и микроразметки schema.org/Offer, где нужна цена без символов и пробелов (иначе цена не пройдёт валидацию для Google и Яндекса).
Разные языки и несколько валют
Поскольку формат привязан к языку, на мультиязычном сайте у каждой валюты будет отдельная настройка под каждый язык. Для рубля на русском разумно писать # руб. или # ₽, а на английской версии — # RUB, чтобы иностранный покупатель понимал валюту. Заводить эти строки нужно вручную: при добавлении новой валюты Битрикс не заполняет форматы за вас.
Если в каталоге несколько валют и включён пересчёт по курсу, формат берётся у той валюты, в которой цена показывается покупателю после конвертации, а не у валюты хранения. Это важно помнить при отладке: цена конвертируется в валюту показа, и уже её формат применяется к результату.
1С:Управление торговлей приходит только числовое значение и код валюты — вид цены на сайте определяет исключительно модуль currency.Типичные ошибки и как их избежать
Что чаще всего ломает вид цены на боевых проектах:
- Хардкод символа в шаблоне. В коде написано
$price . ' руб.'— при смене валюты или добавлении языка везде остаётся рубль. Лечится переходом наCurrencyFormat()иPRINT_VALUE; - Обычный пробел вместо неразрывного в разделителе разрядов — цена рвётся на две строки в узкой карточке;
- Разные форматы у одной валюты для разных языков, из-за чего в письме и на витрине цена выглядит по-разному;
- Кэш. После правки формата старая цена держится в кэше каталога — нужно сбросить кэш компонентов (
Настройки → Кэшированиеили очистка/bitrix/cache/); - Путаница формата и округления — на витрине 0 знаков, а в корзине копейки, потому что округление по типу цены не настроено.
Итог
Формат цены в 1С-Битрикс централизован: символ валюты, его положение, разделители разрядов и дробной части, число знаков после запятой — всё задаётся в валюте на языковой вкладке модуля currency и хранится в b_catalog_currency_lang. В коде цену выводят через CurrencyFormat() и готовое PRINT_VALUE, а не собирают строку руками. Держите отдельно две вещи: формат отвечает за вид, округление — за реальную сумму.
Если нужно навести порядок в ценах, курсах и форматировании по всему каталогу и корзине — мы настраиваем это в рамках разработки на 1С-Битрикс и интеграции с 1С, чтобы цена одинаково корректно выглядела на витрине, в письмах и в выгрузке заказов.
Частые вопросы
Где в Битрикс менять символ валюты?
В разделе Магазин → Настройки → Валюты, открыв нужную валюту и её языковую вкладку. Символ и его положение задаются в поле «Формат» через плейсхолдер #.
Как поставить символ рубля ₽ вместо «руб.»?
Впишите в поле «Формат» строку «# ₽» с неразрывным пробелом. Если символ отображается квадратиком, проблема в шрифте темы, а не в настройке валюты.
Как сделать разделитель тысяч пробелом?
В настройках валюты в поле «Разделитель групп разрядов» укажите пробел, лучше неразрывный. Тогда цена будет выводиться как 1 250 000, а не 1250000.
Почему после изменения формата цена не поменялась на сайте?
Скорее всего, отдаётся кэш каталога. Сбросьте кэш компонентов в Настройки → Кэширование или очистите папку /bitrix/cache/ и обновите страницу.
Формат цены влияет на округление суммы заказа?
Нет. Число десятичных знаков в формате меняет только отображение, реальное значение остаётся прежним. За фактическое округление отвечают правила округления по типам цен.
Как вывести отформатированную цену в своём коде?
Используйте функцию CurrencyFormat($price, $currency) или метод CCurrencyLang::CurrencyFormat. В компонентах каталога и корзины готовая строка уже лежит в поле PRINT_VALUE.
Можно ли задать разный формат для русской и английской версии сайта?
Да, формат привязан к языку: у каждой валюты своя строка настроек под каждый язык. Для английской версии обычно ставят код RUB вместо «руб.».
Как убрать копейки из цены?
Поставьте 0 в поле «Десятичных знаков» либо оставьте 2 и включите «Скрывать нули в дробной части», чтобы у целых сумм не показывалось ,00.
Поможем с настройкой и поддержкой 1С-Битрикс: Управление сайтом
Поможем с настройкой, доработкой и поддержкой 1С-Битрикс: Управление сайтом.