【问题标题】:Magento custom cart/checkout values get reset on "Place Order"Magento 自定义购物车/结帐值在“下订单”时重置
【发布时间】:2012-12-04 22:43:51
【问题描述】:

我们正在使用 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()

提前致谢,

【问题讨论】:

    标签: php oop magento


    【解决方案1】:

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

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

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

    如果我错过了您问题的重点,请提供更多详细信息。您在订单表中使用自定义列吗?

    最好的问候

    【讨论】:

      【解决方案2】:

      您不能像下面这样设置订单金额。

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

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

      $quote->collectTotals();

      这将合并您的值。

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

      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>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-11-09
        • 1970-01-01
        • 2013-05-27
        • 1970-01-01
        • 2012-11-08
        • 2014-08-30
        • 2017-01-10
        相关资源
        最近更新 更多