Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 保存订单前更新magento购物车总计_Php_Magento_Cart - Fatal编程技术网

Php 保存订单前更新magento购物车总计

Php 保存订单前更新magento购物车总计,php,magento,cart,Php,Magento,Cart,我需要在客户按下下订单按钮后从购物车中取出一些产品。我可以删除带有自定义事件和观察者的产品,并更新购物车产品,但我无法更新购物车总数。 在observer中,我尝试使用以下内容更新价格: $granTotal = $cart->getGrandTotal() - $cart->getShippingAmount(); $cart->setGrandTotal($GranTotal - $sum)->save(); $baseGranTotal =

我需要在客户按下下订单按钮后从购物车中取出一些产品。我可以删除带有自定义事件和观察者的产品,并更新购物车产品,但我无法更新购物车总数。 在observer中,我尝试使用以下内容更新价格:

    $granTotal = $cart->getGrandTotal() - $cart->getShippingAmount();
    $cart->setGrandTotal($GranTotal - $sum)->save();

    $baseGranTotal = $cart->getBaseGrandTotal() - $cart->getShippingAmount();
    $cart->setBaseGrandTotal($baseGranTotal - $sum)->save();

    $cart->setTotalsCollectedFlag(false)->collectTotals();
    $cart->save();
但购物车的总数不变。我发现总计也存储在购物车地址中,并用于在Mage_Sales_Model_Quote collectTotals函数中设置购物车总计。 在这里:

然后我尝试在调用collectTotals之前更改地址总数,但购物车总数仍然没有更改

我的自定义事件在Mage_Checkout_Model_Type_Onepage saveOrder函数的开头触发

我已经没有办法更新购物车的总数了。 我的观察者是这样的:

public function changeCart(){
    $cart = Mage::getSingleton('checkout/session')->getQuote();
    $data = array();
    $inquiry = array();
    $sum = 0;
    //remove out of stock items to save them in custom model
    foreach ($cart->getAllItems() as $item) {
        if($item->getProduct()->getData('is_in_stock') == 0){
            $cart->removeItem($item->getItemId())->save();
            $inquiry[] = $item->getProduct();
            $data['qty'][$item->getProduct()->getId()] = $item->getData('qty');
            $sum += $item->getProduct()->getFinalPrice();
            $dobavljivost = $item->getProduct()->getResource()->getAttributeRawValue($item->getProduct()->getId(), 'dobavljivost', Mage::app()->getStore());
            Mage::getSingleton('core/session')->setDobavljivost($dobavljivost);
        }
    }

    foreach($cart->getAllAddresses() as $a){
        $a->setGrandTotal(0);;
        $a->setBaseGrandTotal(0);
        $a->setData('subtotal', 0);
        $a->setData('base_subtotal', 0);
    }

    $granTotal = $cart->getGrandTotal() - $cart->getShippingAmount();
    $cart->setGrandTotal($GranTotal - $sum)->save();

    $baseGranTotal = $cart->getBaseGrandTotal() - $cart->getShippingAmount();
    $cart->setBaseGrandTotal($baseGranTotal - $sum)->save();

    $cart->setTotalsCollectedFlag(false)->collectTotals();
    $cart->save();
}

谢谢你的帮助

要重新计算购物车的总数,您可以尝试这样做

$cart = Mage::getSingleton('checkout/session')->getQuote();

foreach ($cart->getAllAddresses() as $address)
{
   $address->unsetData('cached_items_nonnominal');
   $address->unsetData('cached_items_nominal');
}

$cart->setTotalsCollectedFlag(false);
$cart->collectTotals();

要重新计算购物车的总数,您可以尝试这样做

$cart = Mage::getSingleton('checkout/session')->getQuote();

foreach ($cart->getAllAddresses() as $address)
{
   $address->unsetData('cached_items_nonnominal');
   $address->unsetData('cached_items_nominal');
}

$cart->setTotalsCollectedFlag(false);
$cart->collectTotals();

非常感谢。它可以工作,只需在foreach循环中用$address更改$cart!非常感谢你!MagentoAPI怎么可能呢?恐怕不可能通过API实现。不过,你可以尝试做自己的api点。谢谢!它可以工作,只需在foreach循环中用$address更改$cart!非常感谢你!MagentoAPI怎么可能呢?恐怕不可能通过API实现。不过,您可以尝试使用自己的api点。