我正在努力解决一个非常愚蠢的问题。 我在app / code / core / Mage / Checkout / Type / Onepage.php中编辑了saveOrder()方法。 这是因为我想阻止Magento为某些付款方式发送订单确认电子邮件。 而不是标准的电子邮件,我发送一个新的(在后端的交易电子邮件中编码)与不同的信息。 一切都没问题,我做过类似的事情:
if($order->getPayment()->getMethodInstance()->getCode()!='X') {
$order->sendNewOrderEmail();
} else {
$name = $order->getBillingAddress()->getName();
$mailer = Mage::getModel('core/email_template_mailer');
$emailInfo = Mage::getModel('core/email_info');
$emailInfo->addTo($order->getCustomerEmail(), $name);
$mailer->addEmailInfo($emailInfo);
$templateId = 3;
$storeId = Mage::app()->getStore()->getId();
$sender = Array('name' => 'XXX', 'email' => 'xxx@xxx.xxx');
$mailer->setSender($sender);
$mailer->setStoreId($storeId);
$mailer->setTemplateId($templateId);
$mailer->setTemplateParams(array(
'order' => $order
)
);
$mailer->send();
}
除订单总数外,一切正常。在交易邮件中我正在打印
{{var order.getGrandTotal()}}
但我得到价值为“0.999953719008”的1欧元价格产品,我不知道如何解决这个问题。 (测试产品有折扣) 我已经尝试创建一个脚本,该脚本加载以前注册的订单并使用相同的电子邮件模板发送电子邮件。在这种情况下,所有的作品都像魅力! 所以我认为问题是因为订单尚未保存。 我刚尝试使用
将总计作为另一个变量传递 $mailer->setTemplateParams(array(
'order' => $order,
'total' => $order->getGrandTotal()
)
);
并打印
{{var total}}
在模板中,在这种情况下,变量没有任何值。 我怎样设法解决这个问题?
提前感谢!
p.s。:我正在使用1.6版本的Magento安装。
答案 0 :(得分:0)
我之前也有这个。这是由于php浮动问题:
http://php.net/manual/en/language.types.float.php
使用round()
向用户正确显示结果。使用bcadd()
,如果您使用自定义代码更改价格,则可以避免舍入问题。