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


Magento add custom code in xml statement?

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

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

我在购物车里订购了一件价值421美元的商品。这一项被放入一个XML语句中,该语句被发送给第三方,以获得基于购物车中所有项目成本的"债券"的特定价格。回复显示,债券的成本为12.63美元,购物车中两件物品的小计为433.63美元。然后,在玩了421美元的数量后,我开始看到一些奇怪的东西。。。

我将项目编号更改为5,然后单击"更新CART"。我得到的债券回报值为63.15美元,但小计显示,我将2105美元(5件商品的价格(与12.63美元(原始债券的价格(相加,总计2117.63美元。我再次点击"更新购物车",然后它显示总额为2168.15美元。

每次我更改数量时都会发生这种情况。我将之前的"债券"价格添加到当前小计中,只需点击两次"更新CART"即可赶上价格。

所以,我在想如果有一种方法可以添加我在之前创建的代码,它运行其他任何东西,我就能缩小差距我这样做对吗?将我以前的代码添加到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);
    }

我觉得我在这里像是在用大锤杀死一只蚂蚁,但小计总是落后于我的行动一步也许我把这个放错代码了吗

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

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

账单和发货地址会影响总额中的税款。