Magento在xml语句中添加自定义代码?

时间:2014-05-01 15:16:39

标签: php xml magento

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

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

我在购物车中订购了一件价值421美元的商品。这一项被放入一个XML语句中,该语句被发送给第三方以获得基于购物车中所有商品的成本的“债券”的特定价格。响应将债券的成本发回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);
    }

我觉得我在这里用大锤杀死了一只蚂蚁,但小计仍然不断落后于我的行动一步。 我可能会把它放在错误的代码部分吗?

1 个答案:

答案 0 :(得分:0)

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

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

结算和送货地址会影响总税金。