【问题标题】:How to remove item from quote in Magento?如何从 Magento 的报价中删除项目?
【发布时间】:2013-04-17 09:59:16
【问题描述】:

在结帐过程中,我有时想以编程方式从会话报价中删除项目。所以我尝试了这段代码:

$quote = Mage::getSingleton('checkout/session')->getQuote();
$all_quote_items = $quote->getAllItems();
foreach ($all_quote_items as $item) {
    $quote->removeItem($item->getId())->save();
}

但是,在此循环之后,$quote 对象中的项目列表仍然相同,即没有项目被删除。

任何想法我在这里缺少什么?

使用 Magento 1.4.1.1

【问题讨论】:

    标签: magento magento-1.4


    【解决方案1】:

    试试

    $cartHelper = Mage::helper('checkout/cart');
    $items = $cartHelper->getCart()->getItems();        
    foreach ($items as $item) 
    {
       $itemId = $item->getItemId();
       $cartHelper->getCart()->removeItem($itemId)->save();
    } 
    

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

    【讨论】:

    • 谢谢,这帮助我发现了问题。
    • 这不是在每次迭代中保存购物车吗?为什么要这么做?删除迭代中的项目并将购物车保存在其中。
    • @Renon 如何使用 $items = $cartHelper->getCart()->getItems(); API 中的这一行?我可以使用上述代码通过购物车 ID 或客户 ID 获取购物车吗?
    • @SachinVairagi ...您能否提供更多信息或您正在尝试做的示例代码
    • require_once '../app/Mage.php';法师::app('默认'); $proxy = new SoapClient('yxyshareoflove.stag-innov8te.com/api/soap/?wsdl'); $sessionId = $proxy->login('apitest', 'kavya@123'); $cartId = $_REQUEST['quote_id']; $cartHelper = Mage::helper('checkout/cart'); $items = $cartHelper->getCart($cartId)->getItems(); if(count($items->getData())) { foreach ($items as $item) { $itemId = $item->getItemId(); $cartHelper->getCart()->removeItem($itemId)->save(); } echo json_encode(array('status' => true , 'message' => '.')); }
    【解决方案2】:

    Magento 1.7.0.0版本中,可以使用:

    Mage::getSingleton('checkout/cart')->truncate()->save();
    

    【讨论】:

      【解决方案3】:

      我在寻找某种类型的物品时做了类似的过程,我应用的逻辑是:

      $session= Mage::getSingleton('checkout/session');
      $quote = $session->getQuote();
      
      $cart = Mage::getModel('checkout/cart');
      $cartItems = $cart->getItems();
      foreach ($cartItems as $item)
      {
          $quote->removeItem($item->getId())->save();
      }
      

      尝试上述方法,如果失败,我将在执行此逻辑之前和之后开始转储引用对象,以查看有什么不同。

      【讨论】:

      • 不,我以 1:1 复制了您的代码,但循环后项目仍在 $quote 对象中。
      • 好的,在循环中尝试添加: Zend_Debug::dump($quote->removeItem($item->getId())->save());die();让我知道这会返回什么,它应该是 NULL 或一些有用的数据。
      • 我使用了您的代码,但它已从数据库表中删除。但我想在报价创建后从报价会话中删除
      【解决方案4】:

      试试下面的代码吧

      $product = $observer->getEvent()->getProduct();
      $cart = Mage::getSingleton('checkout/cart');
      foreach ($cart->getQuote()->getItemsCollection() as $_item) {
          if ($_item->getProductId() == $productId) {
                  $_item->isDeleted(true);
          //Mage::getSingleton('core/session')->addNotice('This product cannot be added to shopping cart.');
              }
          }
      

      【讨论】:

        猜你喜欢
        • 2023-03-24
        • 2011-06-20
        • 1970-01-01
        • 2013-08-13
        • 2013-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多