Create Database table
CREATE TABLE IF NOT EXISTS `products` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`qty` int(11) NOT NULL,
`price` int(11) NOT NULL,
`name` varchar(255) NOT NULL,
`image` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
INSERT INTO `products` (`id`, `qty`, `price`, `name`, `image`) VALUES
(1, 10, 500, 'Samsung Galaxy S 2', 'galaxys2.jpg'),
(2, 20, 600, 'Samsung Galaxy S 3', 'galaxys3.jpg');
Setup baseurl application\config\config.php
$config['base_url'] = "http://localhost/codeignater/";
Set route application\config\routes.php
$route['default_controller'] = "cart";
Create Controller
//application/controllers/cart.php <?php class Cart extends Controller { function Cart() { parent::Controller(); // We define the the Controller class is the parent. $this->load->model('cart_model'); // Load our cart model for our entire class } function index() { $data['products'] = $this->cart_model->retrieve_products(); // Retrieve an array with all products $data['content'] = 'cart/products'; // Select view to display $this->load->view('index', $data); // Display the page } function add_cart_item(){ if($this->cart_model->validate_add_cart_item() == TRUE){ // Check if user has javascript enabled if($this->input->post('ajax') != '1'){ redirect('cart'); // If javascript is not enabled, reload the page with new data }else{ echo 'true'; // If javascript is enabled, return true, so the cart gets updated } } } function update_cart(){ $this->cart_model->validate_update_cart(); redirect('cart'); } function show_cart(){ $this->load->view('cart/cart'); } function empty_cart(){ $this->cart->destroy(); redirect('cart'); } }Create Model
///application/models/cart_model.php <?php class Cart_model extends Model { // Function to retrieve an array with all product information function retrieve_products(){ $query = $this->db->get('products'); return $query->result_array(); } // Updated the shopping cart function validate_update_cart(){ // Get the total number of items in cart $total = $this->cart->total_items(); // Retrieve the posted information $item = $this->input->post('rowid'); $qty = $this->input->post('qty'); // Cycle true all items and update them for($i=0;$i < $total;$i++) { // Create an array with the products rowid's and quantities. $data = array( 'rowid' => $item[$i], 'qty' => $qty[$i] ); // Update the cart with the new information $this->cart->update($data); } } // Add an item to the cart function validate_add_cart_item(){ $id = $this->input->post('product_id'); // Assign posted product_id to $id $cty = $this->input->post('quantity'); // Assign posted quantity to $cty $this->db->where('id', $id); // Select where id matches the posted id $query = $this->db->get('products', 1); // Select the products where a match is found and limit the query by 1 // Check if a row has been found if($query->num_rows > 0){ foreach ($query->result() as $row) { $data = array( 'id' => $id, 'qty' => $cty, 'price' => $row->price, 'name' => $row->name ); $this->cart->insert($data); return TRUE; } // Nothing found! Return FALSE! }else{ return FALSE; } } }Create view index
//application\views\index.php <html> <head> <title>CodeIgniter Shopping Cart</title> <link href="<?php echo base_url(); ?>assets/css/core.css" media="screen" rel="stylesheet" type="text/css" /> <script type="text/javascript" src="<?php echo base_url(); ?>assets/js/jquery-1.3.2.min.js"></script> <script type="text/javascript" src="<?php echo base_url(); ?>assets/js/core.js"></script> </head> <body> <div id="wrap"> <?php $this->view($content); ?> <div class="cart_list"> <h3>Your shopping cart</h3> <div id="cart_content"> <?php echo $this->view('cart/cart.php'); ?> </div> </div> </div> </body> </html>Create view cart.php
//application\views\cart\cart.php <?php if(!$this->cart->contents()): echo 'You don\'t have any items yet.'; else: ?> <?php echo form_open('cart/update_cart'); ?> <table width="100%" cellpadding="0" cellspacing="0"> <thead> <tr> <td>Qty</td> <td>Item Description</td> <td>Item Price</td> <td>Sub-Total</td> </tr> </thead> <tbody> <?php $i = 1; ?> <?php foreach($this->cart->contents() as $items): ?> <?php echo form_hidden('rowid[]', $items['rowid']); ?> <tr <?php if($i&1){ echo 'class="alt"'; }?>> <td> <?php echo form_input(array('name' => 'qty[]', 'value' => $items['qty'], 'maxlength' => '3', 'size' => '5')); ?> </td> <td><?php echo $items['name']; ?></td> <td>$<?php echo $this->cart->format_number($items['price']); ?></td> <td>$<?php echo $this->cart->format_number($items['subtotal']); ?></td> </tr> <?php $i++; ?> <?php endforeach; ?> <tr> <td</td> <td></td> <td><strong>Total</strong></td> <td>$<?php echo $this->cart->format_number($this->cart->total()); ?></td> </tr> </tbody> </table> <p><?php echo form_submit('', 'Update your Cart'); echo anchor('cart/empty_cart', 'Empty Cart', 'class="empty"');?></p> <p><small>If the quantity is set to zero, the item will be removed from the cart.</small></p> <?php echo form_close(); endif; ?>Create View Product.php
//application\views\cart\products.php <ul class="products"> <?php foreach($products as $p): ?> <li> <h3><?php echo $p['name']; ?></h3> <img src="<?php echo base_url(); ?>assets/img/products/<?php echo $p['image']; ?>" alt="" /> <small>$<?php echo $p['price']; ?></small> <?php echo form_open('cart/add_cart_item'); ?> <fieldset> <label>Quantity</label> <?php echo form_input('quantity', '1', 'maxlength="2"'); ?> <?php echo form_hidden('product_id', $p['id']); ?> <?php echo form_submit('add', 'Add'); ?> </fieldset> <?php echo form_close(); ?> </li> <?php endforeach;?> </ul>Create CSS core.css in root directory assets\css\core.css
body{ font-family: "Lucida Sans"; font-size: 12px; } #wrap{ width: 1024px; } ul.products{ list-style-type: none; width: 525px; margin: 0; padding: 0; } ul.products li{ background: #eeeeee; border: 1px solid #d3d3d3; padding: 5px; width: 150px; text-align: center; float: left; margin-right: 10px; } ul.products h3{ margin: 0; padding: 0px 0px 5px 0px; font-size: 14px; } ul.products small{ display: block; } ul.products form fieldset{ border: 0px; } ul.products form label{ font-size: 12px; } ul.products form input[type=text]{ width: 18px; background: #FFF; border: 1px solid #d3d3d3; } div.cart_list{ background: #eeeeee; border: 1px solid #d3d3d3; padding: 5px; float: left; width: 490px; } div.cart_list h3{ margin: 0 0 10px 0; padding: 0; font-size: 14px; } div.cart_list table thead tr td{ border-bottom: 1px solid #d3d3d3; padding: 5px; } div.cart_list table tbody tr td{ padding: 5px; } div.cart_list table tbody tr td input[type=text]{ background: #FFF; border: 1px solid #d3d3d3; width: 25px; } div.cart_list table tbody tr.alt{ background: #f5f5f5; }Create folder for image root directory assets\img\products\galaxys2.jpg, assets\img\products\galaxys3.jpg Create javascript file assets\js\core.js
$(document).ready(function() { /*place jQuery actions here*/ var link = "/codeignater/index.php/"; $("ul.products form").submit(function() { // Get the product ID and the quantity var id = $(this).find('input[name=product_id]').val(); var qty = $(this).find('input[name=quantity]').val(); $.post(link + "cart/add_cart_item", { product_id: id, quantity: qty, ajax: '1' }, function(data){ if(data == 'true'){ $.get(link + "cart/show_cart", function(cart){ $("#cart_content").html(cart); }); }else{ alert("Product does not exist"); } }); return false; }); $(".empty").live("click", function(){ $.get(link + "cart/empty_cart", function(){ $.get(link + "cart/show_cart", function(cart){ $("#cart_content").html(cart); }); }); return false; }); });