[Codeigniter Framework] Phần 4: Shopping cart trong Codeigniter

php.png

Tiếp tục seri bài viết về Codeigniter, hôm nay mình sẽ tìm hiểu 1 library khá quan trọng, đó là shopping cart. Trong Codeigniter, Shopping cart được lưu dưới dạng mảng và được mã hóa để lưu vào session.

1. Cấu hình

Để sử dụng được shopping cart trong CI, ta phải load thư viện cho nó theo cú pháp như sau:

$this->load->library("cart");

2. Các hàm trong library Shopping Cart

  • Shopping Cart trong Codeigniter lưu dưới dạng mảng và có những key bắt buộc không được sửa như như id, qty, price, name.
  • Ngoài ra nó còn có thêm key options chứa các thông tin con như size, color của sản phẩm đó nên nếu những key này không giống với database của bạn thì hãy xử lý trước khi insert để đồng bộ.
public function insert(){
        $data=array(
            "id" => "1",
            "name" => "Quạt điện",
            "qty" => "1",
            "price" => "100000",
            "option" => array("author" => "Chử Kim Thắng"),
        );
        // Them san pham vao gio hang
        if($this->cart->insert($data)){
             echo "Them san pham thanh cong";
        }else{
            echo "Them san pham that bai";
        }
}

Trong đoạn code này, sử dụng hàm insert của thư viện shopping cart để thêm 1 mảng data vào trong giỏ hàng và trả về kết quả nếu thành công.

  • Show danh sách sản phẩm có trong giỏ hàng:
$this->cart->contents();
  • Để xóa 1 sản phẩm có trong giỏ hàng, ta cần lấy được thuộc tính rowId của sản phẩm đó trong giỏ hảng, sau đó gán cho đối tượng số lượng sản phẩm là qty = 0.
$this->cart->update(array('rowid' => $rowid, 'qty' => 0));
  • Xóa tất cả sản phẩm trong giỏ:
$this->cart->destroy();
  • Tổng số tiền thanh toán trong giỏ hàng:
$this->cart->total();
  • Số lượng sản phẩm có trong giỏ hàng:
$this->cart->total_items();

3. Ví dụ minh họa

  • Trước tiên, các bạn tạo 1 project, sau đó load thư viện của library shopping cart.
  • Tiếp theo, ta sẽ tạo 1 model để chứa mảng danh sách sản phẩm sẽ thêm vào trong giỏ hàng
    <?php
    class Shop_model extends CI_Model{

        public function getList(){
            return array(
                array('id' => '1', 'name' => 'Quạt điện', 'qty' => '2', 'price' => '10000'),
                array('id' => '2', 'name' => 'Đèn học', 'qty' => '5', 'price' => '20000'),
                array('id' => '3', 'name' => 'Quần áo', 'qty' => '3', 'price' => '200000'),
                array('id' => '4', 'name' => 'Cặp sách', 'qty' => '1', 'price' => '500000')
            );
        }
    }
    ?>
  • Sau đó sẽ tạo 1 controller tên là Shop. Trong đó tạo 1 hàm insert để thêm sản phẩm vào trong giỏ hàng, thông tin danh sách sản phẩm thì lấy từ Shop_model
    <?php
    defined('BASEPATH') OR exit('No direct script access allowed');
    class Shop extends CI_Controller {

        public function __construct(){
            parent::__construct();
        }

        public function insert()
        {
            $this->load->model('shop_model');
            $list = $this->shop_model->getList();
            if ($this->cart->insert($list)) {
                echo "Thêm sản phẩm thành công";
            } else{
                echo "Thêm sản phẩm thất bại";
            }
        }
    }
    ?>

Sau đó các bạn gõ đường link sau để chạy hàm insert:

localhost:8080/demo-cart/index.php/shop/insert

  • Tiếp theo chúng ta bổ xung hàm load danh sách giỏ hàng và xóa sản phẩm trong controller như sau:
    <?php
    defined('BASEPATH') OR exit('No direct script access allowed');

    class Shop extends CI_Controller {

        public function __construct(){
            parent::__construct();
        }

        public function index()
        {
            $data['list'] = $this->cart->contents();
            $this->load->view('list_cart', $data);
        }

        public function insert()
        {
            $this->load->model('shop_model');
            $list = $this->shop_model->getList();
            if ($this->cart->insert($list)) {
                echo "Thêm sản phẩm thành công";
            } else{
                echo "Thêm sản phẩm thất bại";
            }
        }

        public function delete($rowid)
        {
            $this->cart->update(array('rowid' => $rowid, 'qty' => 0));
            $this->my_function->php_redirect(BASE_URL.'/index.php/shop/index');
        }

        public function deleteAll(){
            $this->cart->destroy();
            echo "Done";
        }
    }
    ?>

  • Tiếp theo, ở trong view, ta tạo 1 file tên là list_cart.php rùi xây dựng 1 bảng để show toàn bộ sản phẩm trong giỏ:
    <h1 style="text-align: center; margin-top: 100px;">Your Cart</h1>
    <table border="1" width="700px" style="text-align: center; margin: 1px 300px;">
        <tr>
            <td>Index</td>
            <td>Name</td>
            <td>Quantity</td>
            <td>Price</td>
            <td>Amount</td>
            <td>Action</td>
        </tr>
        <?php $count = 1;
        foreach ($list as $p) { ?>
        <tr>
            <td><?php echo $count++; ?></td>
            <td><?php echo $p['name']; ?></td>
            <td><?php echo $p['qty']; ?></td>
            <td><?php echo number_format($p['price']); ?></td>
            <td><?php echo number_format($p['subtotal']); ?></td>
            <td><a href="../shop/delete/<?php echo $p['rowid'];?>">Delete</a></td>
        </tr>
        <?php } ?>
    </table>
    <div style="margin-left: 300px;">
        <h2>Tổng giá: <?php echo $this->cart->format_number($this->cart->total()); ?></h2>
    </div>

Các ban gõ đường dẫn sau để hiển thị kết quả:

http://localhost:8080/demo-cart/index.php/shop demo.png

  • Giờ ta thực hiện tao tác xóa 1 sản phẩm bằng cách nhấn link "Delete" hàng tương ứng. Mình sẽ thao tác dòng thứ 4, sản phẩm sẽ được xóa và hiện kết quả như sau: demo.png Bài viết của mình đến đây kết thúc. Chúc các bạn học tốt.