Php 是否在xml语句中添加自定义代码?
我已经创建了将自定义项目添加到每个购物车所需的代码,所有这些似乎都能按预期工作。代码获取购物车中的项目,并形成XML,在请求中发送给第三方,并将响应解析回我的代码中的数组。然后将响应数组作为具有特定预定SKU的唯一项添加到购物车中 我面临的唯一问题是,当我这样做时,它似乎没有更新购物车中的小计。例如: 我在购物车里订了一件421美元的东西。这一项被放入一个XML语句中,然后发送给第三方,以获得基于购物车中所有项目成本的“债券”的特定价格。响应将债券的成本发回12.63美元,购物车中两个项目的小计按预期为433.63美元。然后,在玩了421美元的物品之后,我开始看到一些奇怪的东西 我将项目编号更改为5,然后单击“更新购物车”。我得到的债券回报值为63.15美元,但小计显示,我将2105美元(5个项目的价格)与12.63美元(原始债券的价格)相加,总计2117.63美元。我再次单击“更新购物车”,然后它显示总共$2168.15 每次我改变数量时都会发生这种情况。我将之前的“债券”价格添加到当前小计中,我需要点击两次“更新购物车”才能赶上价格 因此,我在想,如果有一种方法可以在运行任何其他程序之前添加我创建的代码,我就能够缩小这个差距。我这样做对吗?将我的代码添加到XML中调用此页面的任何其他代码之前的最佳方法是什么 编辑 为了进一步解释,这是我正在使用的代码块:Php 是否在xml语句中添加自定义代码?,php,xml,magento,Php,Xml,Magento,我已经创建了将自定义项目添加到每个购物车所需的代码,所有这些似乎都能按预期工作。代码获取购物车中的项目,并形成XML,在请求中发送给第三方,并将响应解析回我的代码中的数组。然后将响应数组作为具有特定预定SKU的唯一项添加到购物车中 我面临的唯一问题是,当我这样做时,它似乎没有更新购物车中的小计。例如: 我在购物车里订了一件421美元的东西。这一项被放入一个XML语句中,然后发送给第三方,以获得基于购物车中所有项目成本的“债券”的特定价格。响应将债券的成本发回12.63美元,购物车中两个项目的小计
$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\u Checkout\u Model\u Cart::save()方法中看到Magento是如何做到这一点的:
$this->getQuote()->getBillingAddress();
$this->getQuote()->getShippingAddress()->setCollectShippingRates(true);
$this->getQuote()->collectTotals();
$this->getQuote()->save();
账单和发货地址会影响总额中的税费。仅供参考,Magento对此表示感谢。我现在也在那里发布了这个问题。我还想说,如果有一种方法可以在执行此过程后重置购物车小计,我也会对如何学习这个感兴趣。谢谢。我现在就去试一试。祝我好运!我已将当前代码块添加到问题中,并进行了编辑。我肯定我做错了什么,但我不确定那是什么。我没有看到你在这个代码中更新债券的价格——也许它发生在其他地方?好像有什么东西坏了。还要注意,$bs_cart->save();调用与$quote->getBillingAddress()执行相同的操作。。。etc调用,所以您不需要两者都使用。是的,$buySAFEcost在代码的前面已经更新。这是从XML请求响应返回的两个项目之一。