2013-03-01 13 views
5

Tworzę rozszerzenie magento. W którym chcę zaktualizować ilość przedmiotu w koszyku programowo. Używam następującego kodu, aby wyświetlić elementy w koszyku.Magento: Aktualizuj wielkość koszyka programowo

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

Chcę, aby zaktualizować ilość w koszyku dla określonego produktu. Wiem, że można to zrobić jak ten

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

Ale nie lubię tej metody, jak to przejść przez każdy produkt, aby zaktualizować ilość jednym product.I zdumienia czy istnieje sposób, aby zaktualizować ilość w jednej linii i: e bez użycia pętli for.

+0

jakiego wydarzenia używasz? –

+0

sprawdź to: http://www.onlinecode.org/magento-update-cart-quantity/ –

Odpowiedz

12

Masz identyfikator product_id, a nie item_id right?

W takim przypadku nie można uzyskać identyfikatora produktu bez wykonywania wszystkich pozycji.

Spójrz na Mage_Sales_Model_Quote::getItemByProduct($product); zobaczysz, że wykonuje cały katalog.

Zasadniczo zrobię to tak:

//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(); 

Należy zoptymalizować to z niektórych szybkich sztuczki:

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

i

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

aby sprawdzić, czy ilość nie jest już dobrze ...

Należy pamiętać, że jest to niesprawdzony kod i rodzaj reflexions, które pomogą Ci znaleźć rozwiązanie, nie wykonałem pracy za ciebie.

Pozdrowienia,

+0

Jeśli mam identyfikator przedmiotu, to jak mogę to zrobić? –

+0

Jeśli masz item_id usuń 2 pierwsze wiersze i zamień je na $ item = Mage :: getModel ("sales/quote_item") -> load ($ item_id); oraz $ pid = $ item-> getProductId(); – dagfr

+1

Musiałem zmodyfikować w ten sposób, aby to działało: $ quote-> updateItem ($ itemId, array ('qty' => $ qty)); – Mark1inLA

2

Jestem pewien, że to zadziała. Spróbuj tego. To jest oszczędność, mój czas.

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"; 
} 
Powiązane problemy