在确认电子邮件中,不应呼叫任何地方。如果是这种情况,订单电子邮件将使用结账项模板而不是其自己的模板,这可能是由未完全实现的自定义产品类型或模版中的 Bug 引起的。$this->helper('checkout')->formatPrice(...)
订单总计显示正确的货币,因为总计块使用订单的方法,该方法考虑了订单的货币:formatPrice()
$this->getOrder()->formatPrice($total->getValue());
单个项目的模板也使用 。但根据产品类型,使用不同的模板。这是默认模板。$_order->formatPrice(...)
每个产品类型的块和模板都在 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这样的在线支付的问题?因为使用其他方法,使用“下订单”按钮立即创建订单确认邮件,则当前选择的商店货币仍然与订单货币相同。但在来自PayPal回调请求中,此上下文将丢失,并将使用默认货币。
您需要做什么?
- 在布局 XML 文件中搜索布局句柄,以查看默认项呈现器是否已正确注册
<sales_email_order_items>
- 确保任何自定义产品类型也注册其渲染器
- 检查项呈现器使用的模板。也许这是您的主题中的一个错误,您只需要替换为.
$this->_helper('checkout')->formatPrice()
$_order->formatPrice()