Magento: Программное обновление количества в корзине


Я создаю расширение magento. В котором я хочу программно обновить количество товара в корзине. Я использую следующий код для отображения товаров в корзине.

$quote = Mage::getSingleton('checkout/session')->getQuote();
$cartItems = $quote->getAllVisibleItems();
foreach ($cartItems as $item) {
  //Do something
}

Что я хочу, так это обновить количество в корзине для конкретного товара. Я знаю, что это можно сделать так

$pid=15;
$quote = Mage::getSingleton('checkout/session')->getQuote();
$cartItems = $quote->getAllVisibleItems();
foreach ($cartItems as $item) {
if($pid==$item->getId())
$item->setQty($qty);
}

Но мне не нравится этот метод, так как он будет проходить через каждый продукт, чтобы обновить количество одного продукта.Интересно, есть ли способ обновить количество в одной строке i:e без использования цикла for.

Author: Nirmal Ram, 2013-03-01

3 answers

У вас есть идентификатор продукта, а не идентификатор элемента, верно?

В этом случае невозможно получить идентификатор продукта, не выполнив все элементы.

Посмотрите на Mage_Sales_Model_Quote::getItemByProduct($product); вы увидите, что он выполняет весь каталог.

В основном я сделаю это так:

//get Product 
$product = Mage::getModel('catalog/product')->load($pid);
//get Item
$item = $quote->getItemByProduct($product);

$quote->getCart()->updateItem(array($item->getId()=>array('qty'=>$qty)));
$quote->getCart()->save();

Вы должны оптимизировать это с помощью нескольких быстрых трюков:

$quote->hasProductId($pid) to check if product is in the cart

И

($qty!=$item->getQty())

Чтобы проверить, не является ли количество уже хорошим...

Пожалуйста, обратите внимание, что это непроверенный код, и какой-то размышления, чтобы помочь вам найти решение, я не делал эту работу за вас.

С уважением,

 12
Author: dagfr, 2013-03-01 08:43:44

Я уверен, что это сработает. Попробуй это. Это экономит мое время.

public function updateCartAction(){
    $item_id = $this->getRequest()->getParam('item_id');
    $qty = $this->getRequest()->getParam('qty');

    $quote = Mage::getSingleton('checkout/session')->getQuote();
    $quote->updateItem($item_id, array( 'qty' => $qty));
    $quote->save();
    echo "Sssssss";
}
 2
Author: Rajesh Jai, 2015-05-13 13:39:14

Другое решение

  $quote = Mage::getModel('sales/quote')->setStoreId($storeId)->load($cartid);
     $cartItems = $quote->getAllItems();
        foreach ($cartItems as $item) {

         if($cartiemid==$item->getId()){
             $item->setQty($qty);
             $item->save(); // you need to save the item after qty update
         }

        }
    $quote->save();
 0
Author: SyraKozZ, 2018-09-29 20:58:39