Magento: Aggiornamento carrello quantità a livello di programmazione

Sto creando un estensione magento. In cui voglio aggiornare la quantità di articoli in carrello a livello di programmazione. Sto utilizzando il codice riportato di seguito per visualizzare gli articoli nel carrello.

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

Quello che voglio è quello di aggiornare la quantità nel carrello per un prodotto specifico. So che può essere fatto come questo

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

Ma non mi piace questo metodo, si può andare attraverso ogni prodotto per aggiornare la quantità di un singolo prodotto. Mi chiedo se c’è un modo per aggiornare le quantità in una sola riga i:e senza l’utilizzo di loop.

ciò che caso stai usando?
controllare questo : onlinecode.org/magento-update-cart-quantity

OriginaleL’autore Nirmal Ram | 2013-03-01

3 Replies
  1. 13

    Hai il product_id, non il item_id giusto ?

    Se del caso, è impossibile ottenere l’id del prodotto, senza l’esecuzione di tutto il elementi.

    Guardare Mage_Sales_Model_Quote::getItemByProduct($product); vedrete che esegue tutto il catalogo.

    Fondamentalmente farò così :

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

    Si dovrebbe ottimizzare questo con alcuni accorgimenti :

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

    e

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

    per verificare se la quantità non è già buona…

    Siete pregati di notare che il codice non testato, e un qualche tipo di riflessioni per aiutarti a trovare la soluzione, io didn ‘ t fare il lavoro per voi.

    Cordiali Saluti,

    Se ho l’id dell’elemento quindi come posso fare questo?
    Se avete il item_id rimuovere le 2 righe di prima, e sostituirla con $item= Mage::getModel (vendite/quote_item’)->load($item_id); e $pid = $item->getProductId();
    ho dovuto modificare come questo per farlo funzionare: $citazione->updateItem($itemId, array( ‘qta’ => $qta));
    Se l’elemento è l’opzione personalizzata, sarà di errore, come si forza l’aggiornamento solo qty
    può, per favore, fatemelo sapere perché ricevo questo messaggio di Chiamata a una funzione membro updateItem() on a non-object , ho copiato il tuo codice così com’è.

    OriginaleL’autore dagfr

  2. 2

    Io sono sicuro che funzionerà. Prova in questo modo. Si salva è il mio tempo.

    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";
    }

    OriginaleL’autore Rajesh Jai

  3. 0

    un’altra soluzione

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

    OriginaleL’autore SyraKozZ

Lascia un commento