php网上商城购物车设计代码分享


Posted in PHP onFebruary 15, 2012

首先,购物车的数据库设计:
1. id
2. goods_id 商品ID
3. session_id 购物车ID
4. goods_sn 商品编码
5. goods_name 商品名称
6. shop_price 商品商城售价
7. goods_price 商品真实售价(与shop_price的区别在于,当打折的时候,shop_price是打折之前商品的售价,而goods_price是打折之后的)
8. goods_number 数量
9. weight 商品重量
10. goods_attr 商品属性(如颜色,尺码)
11. promote_code 促销编码(为商品促销,做的策略模式识别码)
12. is_promote 促销ID
13. stock_id 库存ID
数据库结构大概是这个样子。当然如果还有其他的需求,比如商品的返利积分,商品是否虚拟产品,商品是否代发货等等,可以另加标示符。这里就不一一举例了。
第二点,我们这个购物车要求是在用户不登陆状态下可以把商品添加到购物车内的,这也是最近非常流行的一种方式,所以在购物车数据库设计里面,就没有加入user_id这个字段,考虑到的是用户未登陆下也可以把商品放入购物车。
那么识别购物车到底是哪一位用户的话,就是需要用到session_id,是用户对应购物车的唯一识别码。生成这个码可以放在购物车对象Cart的构造函数里:

/** 
* 购物车类购物方法 
* @param string $cart_id 购物车ID 
*/ 
public function __construct() 
{ 
Zend_Session::start(); 
$this->_session = new Zend_Session_Namespace('ShopCart'); 
if(!isset($this->_session->session_id)) 
{ 
$this->_session->session_id = md5(uniqid(mt_rand(), true)); 
$this->_session->info = array(); 
} 
$this->_cart_id = $this->_session->session_id; 
}

凡事有利就有弊,这个设计的好处是未登录就可以使用购物车;不好处就是两人共用一台电脑,购物车无法判断商品到底是哪一个人的。
第三点,添加一个商品到购物车。
添加一个商品到购物车,在这里,我把它想成是两个动作。
第一个动作:添加商品到购物车数据库里面。
第二个动作:查找购物车所有商品,并显示出来。
首先是第一个动作:
/** 
* 添加商品 
*/ 
public function goodsAddAction() 
{ 
// 添加商品使用get请求 
$goods_id = $this->_getParam('goods_id');//商品ID 
$goods_spec = $this->_getParam('filter_name');//商品属性(颜色,尺码) 
$goods_number = $this->_getParam('goods_number');//商品数量 
$promote_name = $this->_getParam('promote_name', 'Default');//促销策略 
//获取购物车实例 
$cartB = $this->_getCart(); 
$cartB->goodsAdd($goods_id, $goods_spec, $goods_number, $promote_name); 
//添加成功,跳转到下一步,查找购物车所有商品,并显示出来。 
$this->_showMessage(Bll_Context::isError() ? Bll_Context::getError() : '添加到购物篮成功!', Bll_Context::getRecirect('/orderv2'), 3); 
}

上段代码第15行:
$cartB->goodsAdd($goods_id, $goods_spec, $goods_number, $promote_name);
这就是添加商品操作函数,这里面的$promote_name是促销的一个参数,具体是用策略模式来选用哪种促销策略,我准备在下一篇文章具体来讨论。这里只要知道是添加这个商品的基本信息,存入到购物车数据库里即可。
其次就是第二个动作:
/** 
* 购物列表 
*/ 
public function indexAction() 
{ 
//获取购物车实例 
$cartB = $this->_getCart(); 
//列出购物车内所有商品 
$this->view->goods_list = $cartB->goodsViewList(); 
//获取用于显示规则消息的规则实例列表 
$this->view->tips = $cartB->goodsTipRules(); 
//购物车内商品总数量 
$this->view->total_number = $cartB->getTotalGoodsNumber(); 
//获取购物车内商品总货额 
$this->view->total_amount = $cartB->getTotalAmount(); 
}

这里第一个和第二个动作必须是要分开的,因为用户也可以不添加商品直接点购物车。

下面是效果图:

php网上商城购物车设计代码分享

php网上商城购物车设计代码分享

第一次发帖,有什么不足,不清楚的,还请见谅。欢迎讨论!

PHP 相关文章推荐
新版PHP极大的增强功能和性能
Oct 09 PHP
基于qmail的完整WEBMAIL解决方案安装详解
Oct 09 PHP
落伍首发 php+mysql 采用ajax技术的 省 市 地 3级联动无刷新菜单 源码
Dec 16 PHP
实现php加速的eAccelerator dll支持文件打包下载
Sep 30 PHP
PHP中运用jQuery的Ajax跨域调用实现代码
Feb 21 PHP
PH P5.2至5.5、5.6的新增功能详解
Jul 14 PHP
PHP模块memcached使用指南
Dec 08 PHP
php通过获取头信息判断图片类型的方法
Jun 26 PHP
WordPress网站性能优化指南
Nov 18 PHP
PHP+Apache环境中如何隐藏Apache版本
Nov 24 PHP
thinkPHP框架动态配置用法实例分析
Jun 14 PHP
laravel 配置路由 api和web定义的路由的区别详解
Sep 03 PHP
php后台多用户权限组思路与实现程序代码分享
Feb 13 #PHP
php _autoload自动加载类与机制分析
Feb 10 #PHP
php 文本文件的读取效率
Feb 10 #PHP
php+iframe实现隐藏无刷新上传文件
Feb 10 #PHP
PHP中集成PayPal标准支付的实现方法分享
Feb 06 #PHP
PHP中call_user_func_array()函数的用法演示
Feb 05 #PHP
PHP高级对象构建 多个构造函数的使用
Feb 05 #PHP
You might like
简单PHP上传图片、删除图片实现代码
2010/05/12 PHP
PHP分页效率终结版(推荐)
2013/07/01 PHP
PHP循环遍历数组的3种方法list()、each()和while总结
2014/11/19 PHP
js 实现无缝滚动 兼容IE和FF
2009/07/15 Javascript
js实现分享到随页面滚动而滑动效果的方法
2015/04/10 Javascript
jquery SweetAlert插件实现响应式提示框
2015/08/18 Javascript
js轮播图代码分享
2016/07/14 Javascript
js对象浅拷贝和深拷贝详解
2016/09/05 Javascript
jQuery事件详解
2017/02/23 Javascript
JS基于正则表达式的替换操作(replace)用法示例
2017/04/28 Javascript
基于LayUI分页和LayUI laypage分页的使用示例
2017/08/02 Javascript
微信上传视频文件提示(推荐)
2018/11/22 Javascript
vue+iview动态渲染表格详解
2019/03/19 Javascript
vue通过video.js解决m3u8视频播放格式的方法
2019/07/30 Javascript
[59:42]Secret vs Alliacne 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
[07:01]DOTA2-DPC中国联赛正赛 Aster vs Magma 3月5日 赛后选手采访
2021/03/11 DOTA
Python比较两个图片相似度的方法
2015/03/13 Python
在Python的while循环中使用else以及循环嵌套的用法
2015/10/14 Python
《Python学习手册》学习总结
2018/01/17 Python
解决tensorflow1.x版本加载saver.restore目录报错的问题
2018/07/26 Python
django中media媒体路径设置的步骤
2019/11/15 Python
Pandas数据分析的一些常用小技巧
2021/02/07 Python
美国高级工作服品牌:Carhartt
2018/01/25 全球购物
生产主管岗位职责
2013/11/10 职场文书
客服专员岗位职责范本
2013/11/29 职场文书
交通安全寄语大全
2014/04/08 职场文书
爱心活动计划书
2014/04/26 职场文书
单位授权委托书范本
2014/09/26 职场文书
教师批评与自我批评(群众路线)
2014/10/15 职场文书
公务员保密工作承诺书
2015/05/04 职场文书
CSS实现漂亮的时钟动画效果的实例代码
2021/03/30 HTML / CSS
解决Pytorch半精度浮点型网络训练的问题
2021/05/24 Python
Java Optional<Foo>转换成List<Bar>的实例方法
2021/06/20 Java/Android
JavaScript 数组去重详解
2021/09/15 Javascript
Minikube搭建Kubernetes集群
2022/03/31 Servers
golang语言指针操作
2022/04/14 Golang