0

私は非常に愚かな問題に苦しんでいます。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}}

この場合、変数の値はありません。どうすればこれを解決できますか?

少し早いですがお礼を!

ps: Magento の 1.6 バージョンのインストールを使用しています。

4

1 に答える 1

0

私も以前にこれを持っていました。これは、php float の丸めの問題によるものです。

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

round()結果をユーザーに正しく表示するために使用します。bcadd()カスタムコードでどこかで価格を変更すると、丸めの問題を回避できます。

于 2013-01-18T14:28:07.157 に答える