【问题标题】:Magento - remove one quantity from cartMagento - 从购物车中删除一个数量
【发布时间】:2012-11-15 12:57:19
【问题描述】:

我想从我的购物车中只删除一个数量而不是全部,但无济于事。

有人可以帮忙吗?

这是我目前得到的代码...

require_once 'app/Mage.php';
Mage::app("default");
Mage::getSingleton("core/session", array("name" => "frontend"));
$session = Mage::getSingleton("customer/session");

$yourProId = $_POST['prodID'];
$qty = 1;

foreach (Mage::getSingleton('checkout/session')->getQuote()->getItemsCollection() as $item) {
    if ($yourProId == $item->getProductId()) {
        Mage::getSingleton('checkout/cart')->removeItem($item->getId())->save();
    }
}

更新:这是有效的代码,感谢 R.S.为此!

$yourProId = $_POST['prodID']; 
$qty=1; 

$cartHelper = Mage::helper('checkout/cart');
$items = $cartHelper->getCart()->getItems();
foreach ($items as $item) {
if ($item->getProduct()->getId() == $yourProId) {
    $qty = $item->getQty() - 1; // check if greater then 0 or set it to what you want
    if($qty == 0) {
        Mage::getSingleton('checkout/cart')->removeItem($item->getId());    
    } else {
            $item->setQty($qty);
        }
        $cartHelper->getCart()->save();
        break;
    }
}

【问题讨论】:

    标签: magento cart


    【解决方案1】:

    试试

    $cartHelper = Mage::helper('checkout/cart');
    $items = $cartHelper->getCart()->getItems();
    foreach ($items as $item) {
        if ($item->getProduct()->getId() == $yourProId) {
            if( $item->getQty() == 1 ){
                $cartHelper->getCart()->removeItem($item->getItemId())->save();
            }
            else if($item->getQty() > 1){
                $item->setQty($item->getQty() - 1)
                $cartHelper->getCart()->save();
            }
            break;
        }
    }
    

    看看@/app/code/core/Mage/Checkout/controllers/CartController.php

    http://www.magentocommerce.com/boards/viewthread/30113/

    【讨论】:

    • 我已经尝试过了,很遗憾它没有用。出于某种原因,$item->getId() 与我的 $yourProId 不同。当我使用 $item->getProductId() 时返回正确的 ID。
    • 仍然没有运气:(它会从购物车中删除产品,但我不希望它删除所有数量的产品。例如,我在购物车中有 5 个相同的产品,当这个功能已运行我在购物车中有 0,但我需要它下降到 4。
    • 现在差不多了! :) 还有一个小问题;假设我的购物车中有 3 个,我可以删除 2 个,但是当我剩下 1 个时,它不会删除它。
    • 我上面的代码不正确....因为我正在调用removeItem...但是您应该使用if语句来检查数量并执行remove if 1 else减1
    【解决方案2】:

    您可以使用 $quoteItem->setData('qty', $avl_qty); 更改或删除数量 更多帮助请参考代码。

    $quoteItem = $observer->getEvent()->getQuoteItem();
    $avl_qty = 1;
    if ($avl_qty == '0') {
      $quoteItem->getQuote()->removeItem($quoteItem->getItemId());
      throw new LocalizedException(__("This product is currently out of stock."));                    
    } 
    elseif ($order_qty > $avl_qty) {                   
      $quoteItem->setData('qty', $avl_qty);
      $this->_cart->save();
      $this->messageManager->addNoticeMessage('Sorry we have only '.$avl_qty.' qty of this product available');                    
    } 
    else {                   
    } 
    

    【讨论】:

      【解决方案3】:

      对于 Magento 2 你可以利用 https://yourdomain.com/rest/V1/carts/mine/items 带有身份验证令牌和正文的 API

      {
         "cartItem": {
             "item_id": 49388,//item_id not SKU
             "qty": 1,        //This will overwrite quantity
             "quote_id": {{QuoteId}}
         }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-28
        • 2015-11-22
        相关资源
        最近更新 更多