2013-01-18 119 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