Magento定制购物车/结账价值在“下订单”上重置

时间:2012-12-04 22:43:52

标签: php oop magento

我们正在使用Magento Enterprise 1.10并且一直在实施自定义方式,以便为特定产品提供免费送货和免税。我已经在购物车和Onepage结帐中成功实现了这个显示部分(步骤5)。我遇到的问题是,当您点击“下订单”时,它会删除(或重置)subTotal,grandTotal和taxAmount的自定义值。我可以在sales_flat_quote和sales_flat_quote_item表中看到使用我给出的自定义值设置值。但是sales_flat_quote_address表中的grandTotal和taxAmount没有正确设置(不确定这是否相关,但假设)。它们被重新计算为Magento计算它们的默认方式。

因此,举例来说,我可能会设置自定义值为$ 20的自定义值。但Magento采取产品价格和税率并重新计算。如果这是有道理的。

我已经在我们的OnepageController.php中找到了saveOrderAction()方法

if ($data = $this->getRequest()->getPost('payment', false)) {
   $this->getOnepage()->getQuote()->getPayment()->importData($data);
}

这部分代码正在替换我设置的自定义值以及Magento通常如何设置它们:

我的问题是为什么要阻止上面的代码块重新计算值,只使用我已经设置的值:

Mage::getSingleton('checkout/session')->getQuote()

提前致谢,

2 个答案:

答案 0 :(得分:0)

我不认为覆盖onepage-controller是应用自定义折扣/税的最佳方式。最好将观察者放在事件sales_quote_collect_totals_after上,并在此处重新计算订单总数/修改项目/应用折扣。

此外,我经常看到人们犯了错误,他们忘记调用collectTotals(),或者他们忘记保存他们的更改,即

$quote = Mage::getSingleton('checkout/session')->getQuote();
$quote->setGrandTotal(999.99)->save();

如果我错过了您的问题,请提供进一步的详细信息。您是否在订单表中使用自定义列?

祝你好运

答案 1 :(得分:0)

您无法设置如下订单金额。

$quote->setGrandTotal(999.99)->save();

因为小计,总计,税额是订单总数,并在下面的代码调用时计算。

$quote->collectTotals();

这将合并你的价值。

只需检查名为collect的Mage_Sales_Model_Quote_Address_Total_Abstract中的函数,并在函数开头添加以下代码。

foreach (Mage::getSingleton('checkout/cart')->getQuote()->getAllVisibleItems() as $item ) {
                 if ($item->getParentItem()) {
                     $item = $item->getParentItem();
                 }


                    $item->setTaxAmount(20);

                    $item->getProduct()->setIsSuperMode(true);
            }

当然你应该覆盖这个方法。如果要在模块的config.xml中覆盖

,请在下面使用
<sales>
            <quote>
                <totals>
                    <wrapping>
                        <class>pay/total_taksit</class>
                        <before>subtotal</before>
                    </wrapping>
                </totals>
            </quote>
        </sales>