温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

CodeIgniter框架如何实现购物车功能

发布时间:2021-06-03 14:28:29 来源:亿速云 阅读:163 作者:小新 栏目:开发技术

小编给大家分享一下CodeIgniter框架如何实现购物车功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

1. 源代码

<?php defined('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;

以上是“CodeIgniter框架如何实现购物车功能”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI