Question

Up until Magento 1.7 I was able to use the following code to add a product to cart programatically:

require_once '../app/Mage.php'; 
Mage::getSingleton('core/session', array('name' => 'frontend')); 
umask(0);  
Mage::app();  
$session = Mage::getSingleton('customer/session');  
$product = Mage::getModel('catalog/product')->load(99);  // Random product ID

// get cart and add product
$cart = Mage::getSingleton('checkout/cart'); 
$cart->init();
$cart->addProduct($product, 1);

// update session
$session->setCartWasUpdated(true);

// save the cart
$cart->save();  

However, this does not work anymore in Magento 1.8. I've been trying/searching all day why this is the case. Sadly I haven't found any clue regarding this issue.

It may have to do with the changes in 1.8 which also causes the requirement for a form-key when using the URL method; this is a wild guess though.

Anyone any idea or a working example on how to do this when working with Magento 1.8?

Was it helpful?

Solution

Had a fresh look at it and got it working nicely right away. Just for anyone's reference, here's the code I'm using (Magento 1.8):

// Mage init
require_once '../../app/Mage.php'; 
umask(0);  
Mage::init('default');
Mage::getSingleton('core/session', array('name' => 'frontend'));  

// Get customer session
$session = Mage::getSingleton('customer/session'); 

// Get cart instance
$cart = Mage::getSingleton('checkout/cart'); 
$cart->init();

// Add a product (simple); id:12,  qty: 3 
$cart->addProduct(12, 3);

// Add a product with custom options
$productInstance = Mage::getModel('catalog/product')->load($productId);
$param = array(
    'product' => $productInstance->getId(),
    'qty' => 1,
    'options' => array(
        234 => 'A value'  // Custom option with id: 234
    )
);
$request = new Varien_Object();
$request->setData($param);
$cart->addProduct($productInstance, $request);

// Set shipping method
$quote = $cart->getQuote();
$shippingAddress = $quote->getShippingAddress();
$shippingAddress->setShippingMethod('flatrate_flatrate')->save();               

// update session
$session->setCartWasUpdated(true);

// save the cart
$cart->save(); 

OTHER TIPS

Add this code in controller and Send product id from form

public function buyAction()
  {
        $sksku = $_REQUEST['skusky'];
        $_sku = "sample-".$sksku;

$id = Mage::getModel('catalog/product')->getIdBySku($_sku);
if ($id){
        $_catalog = Mage::getModel('catalog/product');
        $_productId = $_catalog->getIdBySku($_sku);
        $_product = Mage::getModel('catalog/product')->load($_productId);
        $id = $_product->getEntityId();
        $form_key = Mage::getSingleton('core/session')->getFormKey();
        $params = array('form_key'=>$form_key,'qty'=>1);
        $product = Mage::getModel('catalog/product')
        ->setStoreId(
        Mage::app()
        ->getStore()
        ->getId()
        )
        ->load($id);
        $cart = Mage::helper('checkout/cart')->getCart();
        $cart->addProduct($product, $params);
        $cart->save();

        $this->_redirect('checkout/cart');
        Mage::getSingleton('core/session')->addSuccess('Your product has been added to cart.');
}
else{
        $this->_redirectReferer();
        Mage::getSingleton('core/session')->addError('Sorry!!! No sample color option available for this product.');
}      
  }
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top