2013-12-12 14 views
5

Sto provando ad aggiungere un prodotto nel carrello ma il carrello rimane vuoto. Ecco il mio codiceAggiungi prodotto nel carrello - carrello vuoto

try{ 
    $product_model = Mage::getSingleton('catalog/product'); 

    // Load product 
    $_sku = "1-574#AD-B00731"; 
    $my_product_id = $product_model->getIdBySku($_sku); 
    $my_product  = $product_model->load($my_product_id); 
    $qty_value = 1; 

    // Add to cart 
    $cart = Mage::getModel('checkout/cart'); 
    $cart->init(); 
    $cart->addProduct($my_product, array('qty' => $qty_value)); 
    $cart->save(); 
    print_r($cart->getItemsQty().PHP_EOL); 
    Mage::getSingleton('checkout/session')->setCartWasUpdated(true); 
    var_dump("working"); 
} 
catch(Exception $e){ 
    return $e->getMessage(); 
} 

Quando stampo $cart->getItemsQty() mia quantità voce sono incremanting ma il mio carrello è ancora vuoto. Penso che sia Mage::getSingleton('checkout/session')->setCartWasUpdated(true); che non funziona correttamente.

Qualcuno ha un'idea di cosa non funziona?

Edit 1: Io uso Magento 1.8.0, quindi tramite una query di URL non funziona a causa della form_key

risposta

1

cercare di cambiare

$cart = Mage::getModel('checkout/cart'); 

a

$cart = Mage::getSingleton('checkout/cart'); 

carrello è un singleton, perché hai 1 solo carrello nel tuo negozio per 1 utente e tutti coloro che vogliono usarlo possono chiamarlo come getSingleton, senza creare nuovo oggetto. Se usi Mage :: getModel ('checkout/cart') creerà un nuovo oggetto. Sì, ti consentirà di salvare preventivi su DB, ma questo non sarà il carrello corrente del cliente attivo.

+0

Come posso ottenere il carrello del cliente? – Camital

+2

Hai modificato il tuo script come suggerito? Per ottenere il carrello corrente del cliente usa Mage :: getSingleton ('checkout/cart') -> getQuote(); o Mage :: getSingleton ('checkout/session') -> getQuote(); – freento

+0

Sì, l'ho fatto e il mio carrello è ancora vuoto – Camital

1

È necessario aggiornare la cache degli articoli di Itemcollection. Perché questo rimuoverà anche il modello di preventivo da esso, deve essere aggiunto anche dopo quello

$cart->getItems()->clear(); 
$cart->getItems()->setQuote($cart->getQuote()); 
Problemi correlati