iFUEL INTERACTIVE

A NY Interactive Agency and a Division of Agency212

See you on Flickr See you on Twitter See you on FaceBook Subscribe
jQuery, Magento and Ajax Add to Cart Redux
October 15th, 2009  |  12 COMMENTS  |  Development, Magento
Tags: , , , ,

My previous post on adding to the cart with ajax in Magento has generated enough interest – and pointed out enough flaws in my overly complex code – that I’ve decided to put together a simplified version, so here goes:

ajaxAddToCart.zip

Step 1: Create the server side script.
My sample script is called “addToCartTest.php” and I put it in a /scripts folder in the root of my Magento installation.


<?php
include_once '../app/Mage.php';
Mage::app();

try{
     // usage /scripts/addToCartTest.php?product_id=838&amp;amp;amp;amp;amp;qty=1
     $product_id = '';

     // get query string
     if (!isset($_GET['product_id'])) { $product_id = ''; } else { $product_id = $_GET['product_id']; }
     if (!isset($_GET['qty'])) { $qty = '1'; } else { $qty = $_GET['qty']; }

     $product = Mage::getModel('catalog/product')->load($product_id);

     $session = Mage::getSingleton('core/session', array('name'=>'frontend'));
     $cart = Mage::helper('checkout/cart')->getCart();

     $cart->addProduct($product, $qty);

     $session->setLastAddedProductId($product->getId());
     $session->setCartWasUpdated(true);

     $cart->save();

     $result = "{'result':'success'}";
     echo $result;

} catch (Exception $e) {
     $result = "{'result':'error'";
     $result .= ", 'message': '".$e->getMessage()."'}";
     echo $result;
}


Step 2: Create the ‘html’ page
Obviously, you’d be putting this code into your product detail page or wherever you’re trying to add the item to the cart from.

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Ajax add to cart sample</title>
<script src="/scripts/jquery-1.3.2.min-noconflict.js"></script>
<script type="text/javascript">
jQuery(document).ready(function($) {
     $("#buyNowButton").click(function(){
          var qty = $("#qty").val();
          var product_id = $("#buyNowButton").attr("product_id");

          var params = "product_id=" + product_id + "&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;qty=" + qty;        

          var result = $.getJSON("/scripts/addToCartTest.php", params, function(data, textStatus){
               if (textStatus == "error"){
                    alert("There was an error adding this item to your cart.  Please call customer service for assistance.", "Error");
                    return;
               }

               if (data.result == "error"){
                    alert("Sorry, an error occurred while adding the item to your cart.  The error was: '" + data.message + "'");
                    return;
               }

               alert("Thanks!  The item has been added to your cart!")
          });
     });
});
</script>
</head>
<body>
     <input type="text" id="qty" value="1" />
     <a id="buyNowButton" product_id="972" href="#">Buy Now</a>
</body>
</html>

That’s it!

Prerequisites:
1. jQuery (Because Magento uses prototype and scriptaculous, you have to use jQuery in “no conflict” mode);
I’ve included the source code, along with the no-conflict version of jQuery in the zip file attached.

Let me know if you’re using this code (helps my ego)!

=============================
“e-commerce done right

http://www.ifuelinteractive.com

COMMENTS

  • Dude, you saved me a lot of time. Worked perfectly, no strings attached.

    Thanks!

  • molecule

    Nice, any idea how to do this with configurable products?

    Thanks

  • Sam

    Excellent stuff, works perfectly. Now to figure out how to update the cart totals on the page…gonna be jquery to the rescue me thinks!

  • dude you are the man. I just changed it slightly to work with prototype :)

    thanks!!

  • Cool script but it appears that this won’t work from a page that is not hosted on an external site. Thanks for posting.

  • I typed too fast. I was unable to get this script to work from a remote server (e.g. blog, website, etc.)

  • Jon

    I am going to use this, but I just did a quick test with some modifications to handle multiple products. Get in touch if you’d like to see my changes – but they are pretty simple. I just send multiple product ids and quantities to the php script (I use a single delimited string for each set of product ids and for quantities, then explode it on the server and add each item to the cart). Works great, thanks!

  • Is this limited to any particular produce type(s)? I need a solution that will work for simple, configurable and bundled items, and this is definitely the most elegant method I’ve come across so far.

  • Thank you very much, greatly appreciated, we need more people like you helping us out with magento

  • Joe

    Hi, I am getting an error {‘result’:'error’, ‘message’: ‘Mage registry key “_singleton/core/session” already exists’} any ideas?

  • Madhu

    Hi..i have changed a bit and i am able to add multiple products..but prblm is i have to update mycart in the page(the div)..have u tried it?if so pls mail me.
    Thank you!

  • The script worked great, but for some reason it messed up my sessions. Magento kept redirecting to the folder of the ajaxAddToCart files. Fixed the issue by renaming a value in app/etc/local.xml, not sure what happened though. any ideas? (more fix info here: http://www.yireo.com/tutorials/magento/magento-administration/280-unable-to-login-into-the-magento-backend)

LEAVE COMMENT
Your name:  (required)

Your email:  (required, will not be published)

Website:  (not required)

Message:  (required)

Categories
Archives
Tags
Meta
Copyright iFuel Interactive © 2010. All Rights Reserved.
Going up? Click here.A NY INTERACTIVE AGENCY