php magento currency

php - Magento 1.9 símbolo de moneda equivocado en el carro de correo electrónico de confirmación de pedido-al pagar con PayPal-formatPrice()



currency (3)

En el correo electrónico de confirmación, no debería haber llamadas a $this->helper(''checkout'')->formatPrice(...) cualquier lugar. Si este es el caso, el correo electrónico de pedido utiliza las plantillas de elementos de pago en lugar de las suyas, lo que probablemente sea causado por un tipo de producto personalizado no implementado por completo o por un error en su tema.

Los totales del pedido muestran la moneda correcta porque el bloque de totales utiliza el método formatPrice() del pedido, que tiene en cuenta la moneda del pedido:

$this->getOrder()->formatPrice($total->getValue());

Las plantillas para los elementos individuales también usan $_order->formatPrice(...) . Pero dependiendo del tipo de producto, se usan diferentes plantillas. Esta es la plantilla predeterminada .

Los bloques y las plantillas para cada tipo de producto se definen en sales.xml con la acción addItemRender :

<sales_email_order_items> <block type="sales/order_email_items" name="items" template="email/order/items.phtml"> <action method="addItemRender"><type>default</type><block>sales/order_email_items_order_default</block><template>email/order/items/order/default.phtml</template></action> <action method="addItemRender"><type>grouped</type><block>sales/order_email_items_order_grouped</block><template>email/order/items/order/default.phtml</template></action> <block type="sales/order_totals" name="order_totals" template="sales/order/totals.phtml"> <action method="setLabelProperties"><value>colspan="3" align="right" style="padding:3px 9px"</value></action> <action method="setValueProperties"><value>align="right" style="padding:3px 9px"</value></action> <block type="tax/sales_order_tax" name="tax" template="tax/order/tax.phtml"> <action method="setIsPlaneMode"><value>1</value></action> </block> </block> </block> <block type="core/text_list" name="additional.product.info" /> </sales_email_order_items>

Los módulos que agregan tipos de productos tienen que registrar sus propios procesadores allí, como se puede ver en bundle.xml :

<sales_email_order_items> <reference name="items"> <action method="addItemRender"><type>bundle</type><block>bundle/sales_order_items_renderer</block><template>bundle/email/order/items/order/default.phtml</template></action> </reference> </sales_email_order_items>

Si no se definió, el renderizador predeterminado es el del proceso de finalización de la compra, donde no se utiliza el modelo de pedido en sí, solo los elementos individuales (que no tienen información de moneda adjunta). El formador de precios lo realiza el asistente de caja que no tiene información sobre el pedido, por lo que utiliza la moneda de la tienda seleccionada actualmente.

¿Por qué esto solo es un problema con pagos en línea como PayPal? Debido a que con otros métodos, donde el correo de confirmación de pedido se crea inmediatamente con el botón "realizar pedido", la moneda de la tienda seleccionada actualmente sigue siendo la misma que la moneda de la orden. Pero en la solicitud de devolución de llamada de PayPal, este contexto se pierde y en su lugar se usará la moneda predeterminada.

¿Qué necesitas hacer?

  1. Busque el <sales_email_order_items> diseño <sales_email_order_items> en sus archivos XML de diseño para ver si los renderizadores de elementos predeterminados están registrados correctamente
  2. Asegúrese de que cualquier tipo de producto personalizado también registre sus representadores
  3. Verifique las plantillas que utilizan los representadores de elementos. Tal vez sea un error en su tema y solo tiene que reemplazar $this->_helper(''checkout'')->formatPrice() por $_order->formatPrice() .

Tengo Magento 1.9.0.1 ejecutándose con GBP (£) como moneda base y por defecto, y Euros (€) como moneda permitida.

Si el usuario elige pagar en Euros, el sitio funciona, excepto que si paga con PayPal en su propia moneda, entonces el correo electrónico de confirmación del pedido tiene un error. En mi prueba siguiente salí en euros (€) pero mi cuenta de PayPal usaba libras (£).

El precio del artículo del carrito y el subtotal se muestran en euros, pero con un símbolo £. El subtotal, la entrega y el total aparecen todos en euros, con el símbolo de € correcto.

El siguiente ejemplo muestra una representación básica con precios aproximados:

Items Quantity Item Price Sub Total --- --- --- --- Product 1 £150.00 £150.00 <<-- These £''s should be €''s ----------------------------------------------- Sub Total: €150.00 Delivery: €0.00 Total: €150.00 Grand Total to be Charged: £100.00

Intenté rastrearlo, pero no estoy seguro de dónde sale mal, y es una pesadilla para probar. Las llamadas de correo electrónico:

(Mage_Checkout_Helper_Data) $this->helper(''checkout'')->formatPrice(...);

Eso llama

(Mage_Core_Model_Store) $this->getQuote()->getStore()->formatPrice($price);

Que finalmente encuentra su camino hacia los métodos de moneda de Zend, pero no sé dónde se pierde el símbolo de moneda.

Este problema solo ocurre al pagar con PayPal, no al pagar directamente por CC a través del sitio.

¿Alguien puede señalarme en la dirección correcta? Gracias


Este parece ser el error de moneda del juego de caracteres. charset utf-8 aplicar el charset utf-8 buscando ese código en particular para la plantilla de correo electrónico.


Puede cambiar los símbolos de moneda desde Sistema-> Administrar Moneda-> Símbolos