En plantillas Twig están disponibles 2 filtros para visualizar precios y monedas:
{{ order.totalSumm|price }} # 1 234,56 $
{{ order.totalSumm|ru_currency }} # 1 234,56 $
Estos filtros funcionan igual si no está especificado ningún parámetro pero es recomendable utilizar el filtro |price
en todos los casos donde sea posible.
El punto importante es identificar y visualizar correctamente la moneda y el monto. Cada uno de los campos correspondientes al dinero contiene el valor en la moneda del objeto o en la moneda básica.
Por ejemplo, el campo order.totalSumm contiene el valor en la moneda del pedido mientras order.purchaseSumm, en la moneda básica.
Para saber a qué moneda corresponde cada campo en concreto, consulte al Directorio de objetos.
Si el código de moneda no está transmitido en los parámetros del filtro, dichos filtros intentan primero identificar la moneda del campo y la visualizan. Si no la han podido identificar, se visualiza la moneda básica.
Para que dichos filtros identifiquen correctamente la moneda del campo del que viene el valor que visualizan, el filtro debe transmitir la pareja de objeto-campo. En caso de guardar el valor del campo en una variable intermedia e ingresar el precio a través de estos filtros para la variable, el contexto monetario del campo se perderá y se visualizará la moneda básica.
Consideremos un ejemplo
Supongamos que la moneda básica en el sistema sea el Dólar estadounidense ($) y la moneda adicional sea el Euro (€). Un pedido está formalizado en Euro y queremos generar una plantilla de la impresión con twig para imprimirla para este pedido.
Especifiquemos una construcción del siguiente tipo en la plantilla:
Total del pedido: {{ order.totalSumm|price }}
En la plantilla de impresión se visualizará:
Total del pedido: 1 000,45 €
Ahora cambiemos la construcción por
{% set total = order.totalSumm %}
Total del pedido: {{ total|price }}
En la plantilla de impresión se visualizará:
Total del pedido: 1 000,45 $
Como se nota, la moneda del campo del pedido se ha perdido y en la plantilla se visualiza el precio con una moneda incorrecta.
Cabe destacar que la moneda estará identificada correctamente si la referencia al campo se realizará a través de una cadena de llamadas a los objetos.
Por ejemplo,
{{ order.payments[0].amount|price }} # 1 000,45 €
{{ customer.lastOrder.totalSumm|price }} # 1 000,45 €