2013-01-18 71 views
0

我正在努力解决一个非常愚蠢的问题。 我编辑了app/code/core/Mage/Checkout/Type/Onepage.php中的saveOrder()方法。 这是因为我想阻止Magento为某些付款方式发送订单确认电子邮件。 而不是标准的电子邮件,我发送一个新的(在后端交易电子邮件编码)与不同的信息。 所有这没关系,我已经做了一些类似:Magento在onepage.php获得订单总额

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' => '[email protected]'); 
    $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

我以前也有过。这是由于PHP的浮动四舍五入问题:

http://php.net/manual/en/language.types.float.php

使用round()正确地显示你的结果给用户。使用bcadd(),如果您使用自定义代码在某处更改价格,则可以避免舍入问题。

+0

感谢您的回复。 我已经试过这种方式。 问题是,如果我尝试将$ order-> getGrandTotal()作为附加变量传递给邮件模板并打印出来,它会给我一个空值。我错在哪里? – michaelramin