我有Magento 1.9.0.1以GBP(£)作为基准和默认显示货币,以及欧元(€)作为允许货币。
如果用户选择以欧元结账,则该网站全部有效,除非他们以自己的货币通过PayPal付款,否则订单确认电子邮件有误。在我下面的测试中,我以欧元(€)结账,但我的PayPal账户使用的是英镑(£)。
购物车的商品价格和子总价以欧元显示,但带有符号。 Sub Total,Delivery&总计全部以欧元显示,并带有正确的€符号。
以下示例显示了具有近似价格的基本表示:
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
我试图追踪它,但我不确定它出了什么问题,这是一个测试的噩梦。电子邮件致电:
(Mage_Checkout_Helper_Data) $this->helper('checkout')->formatPrice(...);
那叫
(Mage_Core_Model_Store) $this->getQuote()->getStore()->formatPrice($price);
最终找到了通往Zend货币方法的方法,但我不知道货币符号在哪里丢失。
此问题仅在使用PayPal结账时发生,而不是在CC直接通过网站付款时发生。
有人能指出我正确的方向吗? 感谢
答案 0 :(得分:3)
在确认电子邮件中,任何地方都不应该拨打$this->helper('checkout')->formatPrice(...)
。如果是这种情况,订单电子邮件使用结帐项目模板而不是自己的模板,这可能是由于未完全实现的自定义产品类型或主题中的错误造成的。
订单总计显示正确的货币,因为totals block使用订单的formatPrice()
方法,该方法会考虑订单的货币:
$this->getOrder()->formatPrice($total->getValue());
单个项目的模板也使用$_order->formatPrice(...)
。但根据产品类型,使用不同的模板。 This is the default template
每个产品类型的细分和模板都在sales.xml
中使用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>
添加产品类型的模块必须在那里注册自己的渲染器,如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>
如果未定义此选项,则默认渲染器是结帐时的默认渲染器,其中未使用订单模型本身,仅使用单个项目(未附加货币信息)。价格格式由结账助手完成,该助手没有关于订单的信息,因此它使用当前选择的商店货币。
为什么这只是PayPal等在线支付的问题?因为使用其他方法,订单确认邮件立即使用&#34;下订单&#34;按钮,当前选择的商店货币仍然与订单货币相同。但是在PayPal的回调请求中,此上下文将丢失,而将使用默认货币。
<sales_email_order_items>
布局句柄,以查看默认项目渲染器是否已正确注册$this->_helper('checkout')->formatPrice()
替换为$_order->formatPrice()
。答案 1 :(得分:-3)
这似乎是charset货币错误。
您需要通过搜索电子邮件模板的特定代码来应用charset utf-8
。
答案 2 :(得分:-4)
您可以从系统 - &gt;管理货币 - >符号
更改货币符号