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

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

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

话不多说,往下看:

1. 源代码

rush:PHP;"> 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. 数据库

rush:sql;"> 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,`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相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》、《》、《》、《》、《》及《PHP常见数据库操作技巧汇总》

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


服务器优化必备:深入了解PHP8底层开发原理
Golang的网络编程:如何快速构建高性能的网络应用?
Golang和其他编程语言的对比:为什么它的开发效率更高?
PHP8底层开发原理揭秘:如何利用新特性创建出色的Web应用
将字符重新排列以形成回文(如果可能)在C++中
掌握PHP8底层开发原理和新特性:创建高效可扩展的应用程序
服务器性能优化必学:掌握PHP8底层开发原理
PHP8新特性和底层开发原理详解:优化应用性能的终极指南
将 C/C++ 代码转换为汇编语言
深入研究PHP8底层开发原理:创建高效可扩展的应用程序
C++程序查找法向量和迹
PHP8底层开发原理实战指南:提升服务器效能
重排数组,使得当 i 为偶数时,arr[i] >= arr[j],当 i 为奇数时,arr[i] <= arr[j],其中 j < i,使用 C++ 语言实现
Golang的垃圾回收:为什么它可以减少开发人员的负担?
C++程序:将一个数组的所有元素复制到另一个数组中
Golang:构建智能系统的基石
为什么AI开发者应该关注Golang?
在C和C++中,逗号(comma)的用法是用来分隔表达式或语句
PHP8底层开发原理解析及新特性应用实例
利用PHP8底层开发原理解析新特性:如何构建出色的Web应用