【问题标题】:Magento getting order grand total in onepage.phpMagento 在 onepage.php 中获得订单总额
【发布时间】:2013-01-18 13:45:00
【问题描述】:

我正在努力解决一个非常愚蠢的问题。 我在 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()}}

但是对于 1 欧元价格的产品,我得到的值是“0.999953719008”,我不知道如何解决这个问题。 (测试产品有折扣) 我尝试创建一个脚本来加载先前注册的订单并使用相同的电子邮件模板发送电子邮件。在这种情况下,一切都像魅力一样! 所以我想问题是因为订单还没有保存。 我刚刚尝试使用

将总计作为另一个变量传递
    $mailer->setTemplateParams(array(
            'order' => $order,
            'total' => $order->getGrandTotal()
        )
    );

和打印

{{var total}}

在模板中,在这种情况下,变量没有任何值。 我该如何解决这个问题?

提前致谢!

p.s.:我使用的是 1.6 版本的 Magento 安装。

【问题讨论】:

    标签: magento


    【解决方案1】:

    我以前也有过。这是由于 php 浮点舍入问题:

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

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

    【讨论】:

    • 感谢您的回复。我已经尝试过这种方式。问题是,如果我尝试将 $order->getGrandTotal() 作为附加变量传递给邮件模板并将其打印出来,它会给我一个空值。我哪里错了?
    猜你喜欢
    • 2016-02-18
    • 2013-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-25
    • 1970-01-01
    • 2021-11-23
    相关资源
    最近更新 更多