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.
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())
Чтобы проверить, не является ли количество уже хорошим...
Пожалуйста, обратите внимание, что это непроверенный код, и какой-то размышления, чтобы помочь вам найти решение, я не делал эту работу за вас.
С уважением,
Я уверен, что это сработает. Попробуй это. Это экономит мое время.
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";
}
Другое решение
$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();