В twig-шаблонах доступны 2 фильтра для вывода форматированной цены с валютой:
{{ order.totalSumm|price }} # 1 234,56 ₽
{{ order.totalSumm|ru_currency }} # 1 234,56 ₽
Данные фильтры без указания параметров работают одинаково, но рекомендуется везде, где возможно использовать фильтр |price
.
Важным моментом является правильное определение и вывод валюты для суммы. Каждое из денежных полей объектов хранит значение в валюте объекта, либо в базовой валюте.
Например, поле order.totalSumm
хранит значение в валюте заказа, а order.purchaseSumm
— в базовой валюте.
В какой валюте хранится конкретное поле вы можете узнать из Справочника объектов.
Упомянутые выше фильтры, если код валюты не передан в параметрах фильтра, пытаются сначала определить валюту поля и выводят ее. Если определить не удалось, то выводится базовая валюта.
Чтобы упомянутые фильтры правильно определяли валюту поля, значение которого выводится, в фильтр нужно передавать непосредственно пару объект-поле. В случае, если вы сохраните значение из поля в промежуточную переменную и выведете цену данными фильтрами для переменной, то валютный контекст поля будет утерян, и выведется базовая валюта.
Рассмотрим на примере
Допустим в системе базовая валюта Российский рубль (₽) и дополнительная валюта Турецкая лира (₺). Также в системе оформлен заказ в Турецкой лире и мы хотим сформировать twig-шаблон печатной формы заказа и распечатать ее для данного заказа.
Укажем в шаблоне конструкцию вида:
Общая стоимость заказа: {{ order.totalSumm|price }}
В распечатанной форме будет выведено:
Общая стоимость заказа: 1 000,45 ₺
Теперь заменим конструкцию в шаблоне на:
{% set total = order.totalSumm %}
Общая стоимость заказа: {{ total|price }}
В распечатанной форме будет выведено:
Общая стоимость заказа: 1 000,45 ₽
Как видим, контекст валюты поля заказа был утерян и в результате шаблон выводит цену с неправильной валютой.
Стоит отметить, что валюта также будет корректно определяться, если обращение к полю будет производиться через цепочку вызова объектов.
Например:
{{ order.payments[0].amount|price }} # 1 000,45 ₺
{{ customer.lastOrder.totalSumm|price }} # 1 000,45 ₺