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 相关文章推荐
桌面中心(三)修改数据库
Oct 09 PHP
一个取得文件扩展名的函数
Oct 09 PHP
global.php
Dec 09 PHP
php xml留言板 xml存储数据的简单例子
Aug 24 PHP
PHP分页效率终结版(推荐)
Jul 01 PHP
php使用base64加密解密图片示例分享
Jan 20 PHP
PHP+APACHE实现网址伪静态
Feb 22 PHP
[原创]解决wincache不支持64位PHP5.5/5.6的问题(提供64位wincache下载)
Jun 22 PHP
yum命令安装php7和相关扩展
Jul 04 PHP
yii2 resetful 授权验证详解
May 18 PHP
PHP实现普通hash分布式算法简单示例
Aug 06 PHP
TP - 比RBAC更好的权限认证方式(Auth类认证)
Mar 09 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
再说下636单管机
2021/03/02 无线电
一个显示天气预报的程序
2006/10/09 PHP
php多种形式发送邮件(mail qmail邮件系统 phpmailer类)
2014/01/22 PHP
全面解读PHP的Yii框架中的日志功能
2016/03/17 PHP
javascript multibox 全选
2009/03/22 Javascript
javascript自定义的addClass()方法
2014/05/28 Javascript
基于javascript实现根据身份证号码识别性别和年龄
2016/01/22 Javascript
JS表格组件BootstrapTable行内编辑解决方案x-editable
2016/09/01 Javascript
ES6中新增的Object.assign()方法详解
2017/09/22 Javascript
Angular整合zTree的示例代码
2018/01/24 Javascript
详解vue组件之间的通信
2020/08/30 Javascript
用Python脚本生成Android SALT扰码的方法
2013/09/18 Python
Python脚本实现代码行数统计代码分享
2015/03/10 Python
Python验证企业工商注册码
2015/10/25 Python
Python中的sort()方法使用基础教程
2017/01/08 Python
Java实现的执行python脚本工具类示例【使用jython.jar】
2018/03/29 Python
PyTorch线性回归和逻辑回归实战示例
2018/05/22 Python
在PyCharm导航区中打开多个Project的关闭方法
2019/01/17 Python
Pandas0.25来了千万别错过这10大好用的新功能
2019/08/07 Python
基于Python实现船舶的MMSI的获取(推荐)
2019/10/21 Python
Django视图扩展类知识点详解
2019/10/25 Python
Tensorflow设置显存自适应,显存比例的操作
2020/02/03 Python
python异常处理、自定义异常、断言原理与用法分析
2020/03/23 Python
django中url映射规则和服务端响应顺序的实现
2020/04/02 Python
xadmin使用formfield_for_dbfield函数过滤下拉表单实例
2020/04/07 Python
Python Scrapy多页数据爬取实现过程解析
2020/06/12 Python
详解Python GUI编程之PyQt5入门到实战
2020/12/10 Python
J2EE包括哪些技术
2016/11/25 面试题
小学校园活动策划
2014/01/30 职场文书
社会实践先进工作者事迹材料
2014/05/06 职场文书
优秀应届本科生求职信
2014/07/19 职场文书
财务工作犯错检讨书
2014/10/07 职场文书
财务工作个人总结
2015/02/27 职场文书
廉洁自律证明
2015/06/24 职场文书
2016入党积极分子党课学习心得体会
2015/10/09 职场文书
如何利用Matlab制作一款真正的拼图小游戏
2021/05/11 Python