基于CI(CodeIgniter)框架实现购物车功能的方法
author:一佰互联 2019-04-25   click:227

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

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

话不多说,往下看:

1. 源代码

<?phpdefined("BASEPATH") OR exit("No direct script access allowed");class cart extends Home_Controller {  private $info = array();    #前台提交数据  private $specData = array();  #规格信息  private $prodData = array();  #货品组合信息  private $cartData = array();  #购物车入库数据  /**   * 构造函数   */  public function __construct()  {    parent::__construct();    $this->load->model("goodsModel","goods");    $this->load->model("productModel","product");    $this->load->model("goodsAttrModel","goodsAttr");  }  /**   * [购物车]数据添加   */  public function cartAdd()  {    #接收购物车提交数据    $this->info = $this->input->post();  // $this->ajaxReturn($this->info);    #1.验证商品库存、货品库存    $this->checkGoodsNumber();    #2.查询规格名称、价格    $this->getSpecData();    #3.组装购物车添加de数据    $cartData = $this->setCartData();  p(json_decode($this->input->cookie("cart"),true));    # 一、判断是否登录    if(!UID){      //未登录 数据存入Cookie中      //1:获取cookie中的购物车数据      $cookieCartData = $this->input->cookie("cart");      //2:判断cookie中数据是否为空      if(empty($cookieCartData)){        //2-1:为空则表示用户没有添加过购物车        //2-1-1.设置Key-->生成购物车数据        $key = $cartData["goods_id"]."-".$cartData["product_id"];        $cookieCart = array($key => $cartData);        //2-1-2.设置购物车返回值(商品数量、总价)        $this->setCartReturn(1,$cartData["goods_price"]);        //2-1-3.设置Cookie存储购物车数据      }else{        //2-2:不为空 表示用户添加过购物车        //2-2-1.追加购物数据        $cookieCart = $this->addCartData($cartData,json_decode($cookieCartData,true));        //2-2-2.设置购物车返回值(商品数量、总价)        $this->setCartReturn(count($cookieCart),array_sum(array_column($cookieCart, "goods_price")));      }      //3:设置Cookie存储购物车数据      setCookie("cart",json_encode($cookieCart),LEFT_TIME,"/");    }else{      //已登录 数据存入数据库    }    //返回购物车提示数据    $this->ajaxReturn($this->msg);  }  /**   * 验证商品库存   */  public function checkGoodsNumber()  {    $this->goods->map = array(      "goods_id"     =>  $this->info["goods_id"],      "goods_number >="  => $this->info["buy_number"],    );    $this->goods = $this->goods->find("goods_id,goods_name,goods_sn,goods_img,shop_price");    if(!$this->goods){      $this->msg["msg"] = "商品库存不足";      $this->ajaxReturn($this->msg);    }    #验证货品库存    $this->product->map = array(      "goods_id"     =>  $this->info["goods_id"],      "product_attr"   =>  $this->info["prod_attr"],      "product_number >=" => $this->info["buy_number"],    );    $this->prodData = $this->product->find();    if(!$this->prodData){      $this->msg["msg"] = "货品库存不足";      $this->ajaxReturn($this->msg);    }    return true;  }  /**   * 组合规格名称、价格   */  public function getSpecData()  {    $this->goodsAttr->map = inToType(explode("|", $this->info["prod_attr"]),"goods_attr_id");    $goodsAttrInfo = $this->goodsAttr->select("goods_attr_value,goods_attr_price");    $this->specData["product_attr_value"] = implode("|", array_column($goodsAttrInfo, "goods_attr_value"));    $this->specData["product_price"] = array_sum(array_column($goodsAttrInfo,"goods_attr_price"));    # 返回规格信息 $this->specData  }  /**   * 组装购物车添加的数组   */  public function setCartData()  {    $this->cartData = array(      "product_id"  =>  $this->prodData["product_id"],      "product_attr" =>  $this->prodData["product_attr"],      "buy_number"  =>  $this->info["buy_number"],      "goods_price"  =>  $this->info["shop_price"],      "goods_sum"   =>  $this->info["shop_price"] * $this->info["buy_number"],      "product_price" =>  "",      "product_attr_value"  =>  "",      "uid"      =>  UID,    );    $this->cartData = array_merge($this->cartData,$this->goods);    #若存在规格【添加规格信息】    if(!empty($this->info["prod_attr"])){      $this->cartData["product_price"] = $this->specData["product_price"];      $this->cartData["product_attr_value"] = $this->specData["product_attr_value"];    }    return $this->cartData;    # 购物车 添加的总数据 $this->cartData;  }  /**   * 设置购物车返回提示数据   * @param [商品数量,总价]   */  public function setCartReturn($number,$prices)  {    $this->msg["code"] = self::STATUS_ON;    $this->msg["data"] = array(        "number"  =>  $number,        "prices"  =>  $prices,    );  }  /**   * 购物车 新添加数据   * @param [新数据,原购物车数据]   */  public function addCartData($newData,$oldData)  {    #组合Key    $key = $newData["goods_id"]."-".$newData["product_id"];    // #判断购物车中是否有该商品    if(isset($oldData[$key])){      //1.有 合并商品数量、价格      $oldData[$key]["buy_number"] = $oldData[$key]["buy_number"] + $newData["buy_number"];      $oldData[$key]["goods_price"] = $newData["goods_price"];      $oldData[$key]["goods_sum"] = $oldData[$key]["buy_number"] * $oldData[$key]["goods_price"];    }else{      //2.没有 追加新商品      $oldData[$key] = $newData;    }    #返回购物车数据    return $oldData;  }}?>

2. 数据库

CREATE TABLE `shop_goods` ( `goods_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `goods_name` varchar(255) NOT NULL, `type_id` int(11) DEFAULT NULL, PRIMARY KEY (`goods_id`)) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;CREATE TABLE `shop_product` ( `product_id` int(11) unsigned NOT NULL AUTO_INCREMENT, `goods_id` int(11) NOT NULL, `goods_price` decimal(10,2) NOT NULL, `goods_num` int(11) NOT NULL, `goods_sn` varchar(50) NOT NULL, `goods_attr_id` varchar(100) NOT NULL, PRIMARY KEY (`product_id`)) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8;CREATE TABLE `shop_goods_attr` ( `goods_attr_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `goods_id` int(11) NOT NULL, `attr_id` int(11) NOT NULL, `attr_value` varchar(255) NOT NULL, PRIMARY KEY (`goods_attr_id`)) ENGINE=InnoDB AUTO_INCREMENT=126 DEFAULT CHARSET=utf8;

CI购物车总结完毕!!!

更多关于CodeIgniter相关内容感兴趣的读者可查看本站专题:《codeigniter入门教程》、《CI(CodeIgniter)框架进阶教程》、《php优秀开发框架总结》、《ThinkPHP入门教程》、《ThinkPHP常用方法总结》、《Zend FrameWork框架入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家基于CodeIgniter框架的PHP程序设计有所帮助。