当前位置:首页 > CMS教程 > 其它CMS > 列表

基于CI(CodeIgniter)框架实现购物车功能的方法

发布:smiling 来源: PHP粉丝网  添加日期:2021-09-07 09:58:37 浏览: 评论:0 

这篇文章主要介绍了基于CI(CodeIgniter)框架实现购物车功能的方法,结合实例形式分析了CodeIgniter框架购物车功能类的定义及数据库建立相关sql命令,需要的朋友可以参考下。

本文实例讲述了基于CI(CodeIgniter)框架实现购物车功能的方法,分享给大家供大家参考,具体如下:

在商城项目中,购物车是非常重要的一环,此处留下源码,留作笔记!!!

话不多说,往下看:

1. 源代码

  1. <?php 
  2. defined('BASEPATH') OR exit('No direct script access allowed'); 
  3. class cart extends Home_Controller { 
  4.   private $info = array();    #前台提交数据 
  5.   private $specData = array();  #规格信息 
  6.   private $prodData = array();  #货品组合信息 
  7.   private $cartData = array();  #购物车入库数据 
  8.   /** 
  9.    * 构造函数 
  10.    */ 
  11.   public function __construct() 
  12.   { 
  13.     parent::__construct(); 
  14.     $this->load->model('goodsModel','goods'); 
  15.     $this->load->model('productModel','product'); 
  16.     $this->load->model('goodsAttrModel','goodsAttr'); 
  17.   } 
  18.   /** 
  19.    * [购物车]数据添加 
  20.    */ 
  21.   public function cartAdd() 
  22.   { 
  23.     #接收购物车提交数据 
  24.     $this->info = $this->input->post(); 
  25.   // $this->ajaxReturn($this->info); 
  26.     #1.验证商品库存、货品库存 
  27.     $this->checkGoodsNumber(); 
  28.     #2.查询规格名称、价格 
  29.     $this->getSpecData(); 
  30.     #3.组装购物车添加de数据 
  31.     $cartData = $this->setCartData(); 
  32.   p(json_decode($this->input->cookie('cart'),true)); 
  33.     # 一、判断是否登录 
  34.     if(!UID){ 
  35.       //未登录 数据存入Cookie中 
  36.       //1:获取cookie中的购物车数据 
  37.       $cookieCartData = $this->input->cookie('cart'); 
  38.       //2:判断cookie中数据是否为空 
  39.       if(emptyempty($cookieCartData)){ 
  40.         //2-1:为空则表示用户没有添加过购物车 
  41.         //2-1-1.设置Key-->生成购物车数据 
  42.         $key = $cartData['goods_id'].'-'.$cartData['product_id']; 
  43.         $cookieCart = array($key => $cartData); 
  44.         //2-1-2.设置购物车返回值(商品数量、总价) 
  45.         $this->setCartReturn(1,$cartData['goods_price']); 
  46.         //2-1-3.设置Cookie存储购物车数据 
  47.       }else
  48.         //2-2:不为空 表示用户添加过购物车 
  49.         //2-2-1.追加购物数据 
  50.         $cookieCart = $this->addCartData($cartData,json_decode($cookieCartData,true)); 
  51.         //2-2-2.设置购物车返回值(商品数量、总价) 
  52.         $this->setCartReturn(count($cookieCart),array_sum(array_column($cookieCart'goods_price'))); 
  53.       } 
  54.       //3:设置Cookie存储购物车数据 
  55.       setCookie('cart',json_encode($cookieCart),LEFT_TIME,'/'); 
  56.     }else
  57.       //已登录 数据存入数据库 
  58.     } 
  59.     //返回购物车提示数据 
  60.     $this->ajaxReturn($this->msg); 
  61.   } 
  62.   /** 
  63.    * 验证商品库存 
  64.    */ 
  65.   public function checkGoodsNumber() 
  66.   { 
  67.     $this->goods->map = array
  68.       'goods_id'     =>  $this->info['goods_id'], 
  69.       'goods_number >='  => $this->info['buy_number'], 
  70.     ); 
  71.     $this->goods = $this->goods->find('goods_id,goods_name,goods_sn,goods_img,shop_price'); 
  72.     if(!$this->goods){ 
  73.       $this->msg['msg'] = "商品库存不足"
  74.       $this->ajaxReturn($this->msg); 
  75.     } 
  76.     #验证货品库存 
  77.     $this->product->map = array
  78.       'goods_id'     =>  $this->info['goods_id'], 
  79.       'product_attr'   =>  $this->info['prod_attr'], 
  80.       'product_number >=' => $this->info['buy_number'], 
  81.     ); 
  82.     $this->prodData = $this->product->find(); 
  83.     if(!$this->prodData){ 
  84.       $this->msg['msg'] = "货品库存不足"
  85.       $this->ajaxReturn($this->msg); 
  86.     } 
  87.     return true; 
  88.   } 
  89.   /** 
  90.    * 组合规格名称、价格 
  91.    */ 
  92.   public function getSpecData() 
  93.   { 
  94.     $this->goodsAttr->map = inToType(explode("|"$this->info['prod_attr']),'goods_attr_id'); 
  95.     $goodsAttrInfo = $this->goodsAttr->select('goods_attr_value,goods_attr_price'); 
  96.     $this->specData['product_attr_value'] = implode("|", array_column($goodsAttrInfo'goods_attr_value')); 
  97.     $this->specData['product_price'] = array_sum(array_column($goodsAttrInfo,'goods_attr_price')); 
  98.     # 返回规格信息 $this->specData 
  99.   } 
  100.   /** 
  101.    * 组装购物车添加的数组 
  102.    */ 
  103.   public function setCartData() 
  104.   { 
  105.     $this->cartData = array
  106.       'product_id'  =>  $this->prodData['product_id'], 
  107.       'product_attr' =>  $this->prodData['product_attr'], 
  108.       'buy_number'  =>  $this->info['buy_number'], 
  109.       'goods_price'  =>  $this->info['shop_price'], 
  110.       'goods_sum'   =>  $this->info['shop_price'] * $this->info['buy_number'], 
  111.       'product_price' =>  ''
  112.       'product_attr_value'  =>  ''
  113.       'uid'      =>  UID, 
  114.     ); 
  115.     $this->cartData = array_merge($this->cartData,$this->goods); 
  116.     #若存在规格【添加规格信息】 
  117.     if(!emptyempty($this->info['prod_attr'])){ 
  118.       $this->cartData['product_price'] = $this->specData['product_price']; 
  119.       $this->cartData['product_attr_value'] = $this->specData['product_attr_value']; 
  120.     } 
  121.     return $this->cartData; 
  122.     # 购物车 添加的总数据 $this->cartData; 
  123.   } 
  124.   /** 
  125.    * 设置购物车返回提示数据 
  126.    * @param [商品数量,总价] 
  127.    */ 
  128.   public function setCartReturn($number,$prices
  129.   { 
  130.     $this->msg['code'] = self::STATUS_ON; 
  131.     $this->msg['data'] = array
  132.         'number'  =>  $number
  133.         'prices'  =>  $prices
  134.     ); 
  135.   } 
  136.   /** 
  137.    * 购物车 新添加数据 
  138.    * @param [新数据,原购物车数据] 
  139.    */ 
  140.   public function addCartData($newData,$oldData
  141.   { 
  142.     #组合Key 
  143.     $key = $newData['goods_id'].'-'.$newData['product_id']; 
  144.     // #判断购物车中是否有该商品 
  145.     if(isset($oldData[$key])){ 
  146.       //1.有 合并商品数量、价格 
  147.       $oldData[$key]['buy_number'] = $oldData[$key]['buy_number'] + $newData['buy_number']; 
  148.       $oldData[$key]['goods_price'] = $newData['goods_price']; 
  149.       $oldData[$key]['goods_sum'] = $oldData[$key]['buy_number'] * $oldData[$key]['goods_price']; 
  150.     }else
  151.       //2.没有 追加新商品 
  152.       $oldData[$key] = $newData
  153.     } 
  154.     #返回购物车数据 
  155.     return $oldData
  156.   } 
  157. ?> 

2. 数据库

  1. CREATE TABLE `shop_goods` ( 
  2.  `goods_id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
  3.  `goods_name` varchar(255) NOT NULL
  4.  `type_id` int(11) DEFAULT NULL
  5.  PRIMARY KEY (`goods_id`) 
  6. ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8; 
  7. CREATE TABLE `shop_product` ( 
  8.  `product_id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
  9.  `goods_id` int(11) NOT NULL
  10.  `goods_price` decimal(10,2) NOT NULL
  11.  `goods_num` int(11) NOT NULL
  12.  `goods_sn` varchar(50) NOT NULL
  13.  `goods_attr_id` varchar(100) NOT NULL
  14.  PRIMARY KEY (`product_id`) 
  15. ) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8; 
  16. CREATE TABLE `shop_goods_attr` ( 
  17.  `goods_attr_id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
  18.  `goods_id` int(11) NOT NULL
  19.  `attr_id` int(11) NOT NULL
  20.  `attr_value` varchar(255) NOT NULL
  21.  PRIMARY KEY (`goods_attr_id`) 
  22. ) ENGINE=InnoDB AUTO_INCREMENT=126 DEFAULT CHARSET=utf8; 

CI购物车总结完毕!!!

Tags: CodeIgniter CI购物车

分享到: