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桌面中心(二) 数据库写入
Mar 11 PHP
PHP5 面向对象(学习记录)
Dec 02 PHP
CI框架源码阅读,系统常量文件constants.php的配置
Feb 28 PHP
显示youtube视频缩略图和Vimeo视频缩略图代码分享
Feb 13 PHP
ThinkPHP采用GET方式获取中文参数查询无结果的解决方法
Jun 26 PHP
php清空(删除)指定目录下的文件,不删除目录文件夹的实现代码
Sep 04 PHP
PHP四种基本排序算法示例
Apr 09 PHP
在Mac OS上搭建Nginx+PHP+MySQL开发环境的教程
Dec 21 PHP
深入理解PHP之OpCode原理详解
Jun 01 PHP
基于php实现的验证码小程序
Dec 13 PHP
PHP getID3类的使用方法学习笔记【附getID3源码下载】
Oct 18 PHP
Laravel定时任务的每秒执行代码
Oct 22 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
基于Linux调试工具strace与gdb的常用命令总结
2013/06/03 PHP
ThinkPHP中U方法的使用浅析
2014/06/13 PHP
jquery 元素相对定位代码
2010/10/15 Javascript
使用javascript实现简单的选项卡切换
2015/01/09 Javascript
JavaScript日期时间与时间戳的转换函数分享
2015/01/31 Javascript
js 获取本地文件及目录的方法(推荐)
2016/11/10 Javascript
Jquery on绑定的事件 触发多次实例代码
2016/12/08 Javascript
新闻上下滚动jquery 超简洁(必看篇)
2017/01/21 Javascript
angular 用拦截器统一处理http请求和响应的方法
2017/06/08 Javascript
AngualrJs清除定时器遇到的坑
2017/10/13 Javascript
基于vue实现一个禅道主页拖拽效果
2019/05/27 Javascript
利用python获得时间的实例说明
2013/03/25 Python
python实现代理服务功能实例
2013/11/15 Python
Python中集合的内建函数和内建方法学习教程
2015/08/19 Python
Python实现提取XML内容并保存到Excel中的方法
2018/09/01 Python
用python一行代码得到数组中某个元素的个数方法
2019/01/28 Python
代码实例讲解python3的编码问题
2019/07/08 Python
Python datetime包函数简单介绍
2019/08/28 Python
python制作英语翻译小工具代码实例
2019/09/09 Python
python用类实现文章敏感词的过滤方法示例
2019/10/27 Python
python matplotlib 绘图 和 dpi对应关系详解
2020/03/14 Python
python模拟实现分发扑克牌
2020/04/22 Python
解决Python 函数声明先后顺序出现的问题
2020/09/02 Python
python 调整图片亮度的示例
2020/12/03 Python
解决pycharm修改代码后第一次运行不生效的问题
2021/02/06 Python
使用CSS3实现一个3D相册效果实例
2016/12/03 HTML / CSS
3种方式实现瀑布流布局小结
2019/09/05 HTML / CSS
StubHub意大利:购买和出售全球演唱会和体育赛事门票
2017/11/21 全球购物
意大利简约的休闲品牌:Aspesi
2018/02/08 全球购物
世界领先的26岁以下学生和青少年旅行预订网站:StudentUniverse
2018/07/01 全球购物
开办加工厂创业计划书
2014/01/03 职场文书
公司总经理工作职责管理办法
2014/02/28 职场文书
感动中国何玥观后感
2015/06/02 职场文书
公司保洁员管理制度
2015/08/04 职场文书
JavaWeb 入门篇:创建Web项目,Idea配置tomcat
2021/07/16 Java/Android
CSS三大特性继承性、层叠性和优先级详解
2022/01/18 HTML / CSS