【问题标题】:Magento add custom code in xml statement?Magento 在 xml 语句中添加自定义代码?
【发布时间】:2014-05-02 22:33:35
【问题描述】:

我已经创建了向每个购物车添加自定义商品所需的代码,并且所有代码似乎都几乎按预期工作。代码获取购物车中的物品,并制定 XML 格式,在请求中发送给第三方,并将响应解析回我的代码中的数组。然后将响应数组作为具有特定预定 SKU 的唯一商品添加到购物车中。

我面临的唯一问题是,当我这样做时,它似乎没有更新购物车中的小计。例如:

我在购物车中订购了一件价值 421 美元的商品。这一项被放入一个 XML 语句中,该语句被发送给第 3 方,以获得基于购物车中所有项目成本的“保证金”的特定价格。响应将债券成本返回为 12.63 美元,购物车中两项的小计按预期为 433.63 美元。然后,在玩了 421 美元的物品之后,我开始看到一些奇怪的东西......

我将商品编号更改为 5,然后单击“更新购物车”。我得到债券的回报值为 63.15 美元,但小计显示我将 2,105 美元(5 件物品的价格)与 12.63 美元(原始债券的价格)相加,总计 2,117.63 美元。我再次点击“更新购物车”,然后显示总额为 2,168.15 美元。

每次我更改数量时都会发生这种情况。我将之前的“债券”价格添加到当前小计中,我需要点击两次“更新购物车”才能赶上价格。

所以,我在想如果有一种方法可以添加我创建的代码之前它运行其他任何东西,我就能缩小这个差距。 我这样做对吗?将我的代码添加到已放入 XML 以调用此页面的任何其他代码之前的最佳方法是什么?

编辑

为了进一步解释,这是我正在使用的代码块:

    $cartHelper = Mage::helper('checkout/cart');
    if ($buySAFEcost > 0) {
        $product = Mage::getModel('catalog/product');
        $bs_cart = Mage::getModel('checkout/cart');
        $items = $cartHelper->getCart()->getItems();

        $bs_my_product_id  = $product->getIdBySku($bs_sku);
        $bs_my_product     = $product->load($bs_my_product_id);

        $params = array( 'qty' => 1, 'price' => $buySAFEcost );
        $bs_cart->addProduct($bs_my_product,$params);
        $bs_cart->save();

        Mage::app()->setCurrentStore(0); // ADMIN_STORE_ID
        $bs_my_product->setPrice($buySAFEcost);
        $bs_my_product->save();
        // Redo the totals?


        $cartModel->getQuote()->getBillingAddress();
        $cartModel->getQuote()->getShippingAddress()->setCollectShippingRates(true);
        $cartModel->getQuote()->collectTotals();
        $cartModel->getQuote()->save();


        // $cartModel->getQuote()->setTotalsCollectedFlag(false)->collectTotals()->save();

        Mage::app()->setCurrentStore(1); // DISTRO_STORE_ID
        Mage::getSingleton('checkout/session')->setCartWasUpdated(true);
    }

我觉得我在这里用大锤杀死一只蚂蚁,但小计总是比我的行动落后一步。 也许我把它放在了错误的代码部分?

【问题讨论】:

  • 仅供参考,Magento 有其own StackExchange site
  • 谢谢。我现在也在那里发布了这个问题。
  • 我也很愿意说,如果有办法在这个过程执行后重置购物车小计,我也有兴趣了解如何学习。

标签: php xml magento


【解决方案1】:

听起来需要在您的报价对象上收集总计。您可以在 Mage_Checkout_Model_Cart::save() 方法中看到 Magento 是如何做到这一点的:

    $this->getQuote()->getBillingAddress();
    $this->getQuote()->getShippingAddress()->setCollectShippingRates(true);
    $this->getQuote()->collectTotals();
    $this->getQuote()->save();

帐单地址和送货地址会影响总税额。

【讨论】:

  • 谢谢。我现在要试一试。祝我好运!
  • 我已将我当前的代码块添加到问题中,并进行了编辑。我确定我做错了什么,但我不确定那是什么。
  • 我没有看到您在此代码中更新债券的价格 - 也许它正在其他地方发生?好像有什么不对劲。另请注意, $bs_cart->save(); call 与 $quote->getBillingAddress()... 等调用做同样的事情,所以你不需要两者。
  • 是的,$buySAFEcost 已在代码的前面进行了更新。这是从 XML 请求响应返回的两项之一。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-05
  • 1970-01-01
  • 1970-01-01
  • 2018-06-25
  • 1970-01-01
相关资源
最近更新 更多