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支持页面回退的两种方法[转]
Feb 14 PHP
PHP 采集程序 常用函数
Dec 18 PHP
PHP插入排序实现代码
Apr 04 PHP
PHP常用函数和常见疑难问题解答
Mar 05 PHP
phplot生成图片类用法详解
Jan 06 PHP
使用GD库生成带阴影文字的图片
Mar 27 PHP
PHP使用array_merge重新排列数组下标的方法
Jul 22 PHP
php进程间通讯实例分析
Jul 11 PHP
CentOS 7.2 下编译安装PHP7.0.10+MySQL5.7.14+Nginx1.10.1的方法详解(mini版本)
Sep 01 PHP
ThinkPHP5+Layui实现图片上传加预览功能
Aug 17 PHP
php PDO属性设置与操作方法分析
Dec 27 PHP
php获取微信openid方法总结
Oct 10 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设计模式 Builder(建造者模式)
2011/06/26 PHP
关于ob_get_contents(),ob_end_clean(),ob_start(),的具体用法详解
2013/06/24 PHP
PHP引用符&的用法详细解析
2013/08/22 PHP
解决PhpMyAdmin中导入2M以上大文件限制的方法分享
2014/06/06 PHP
php实现在服务器端调整图片大小的方法
2015/06/16 PHP
php json中文编码为null的解决办法
2016/12/14 PHP
PHP使用DOM和simplexml读取xml文档的方法示例
2017/02/08 PHP
jquery下onpropertychange事件的绑定方法
2010/08/01 Javascript
js 静态动态成员 and 信息的封装和隐藏
2011/05/29 Javascript
suggestion开发小结以及对键盘事件的总结(针对中文输入法状态)
2011/12/20 Javascript
jQuery之$(document).ready()使用介绍
2012/04/05 Javascript
jQuery中parents()和parent()的区别分析
2014/10/28 Javascript
浅谈javascript中replace()方法
2015/11/10 Javascript
JS产生随机数的几个用法详解
2016/06/22 Javascript
利用Plupload.js解决大文件上传问题, 带进度条和背景遮罩层
2017/03/15 Javascript
微信小程序 本地数据读取实例
2017/04/27 Javascript
vue.js2.0点击获取自己的属性和jquery方法
2018/02/23 jQuery
详解Element 指令clickoutside源码分析
2019/02/15 Javascript
vue 父组件通过v-model接收子组件的值的代码
2019/10/27 Javascript
python解析xml文件实例分享
2013/12/04 Python
Python中join和split用法实例
2015/04/14 Python
12步教你理解Python装饰器
2016/02/25 Python
python使用Apriori算法进行关联性解析
2017/12/21 Python
Python使用requests及BeautifulSoup构建爬虫实例代码
2018/01/24 Python
python opencv人脸检测提取及保存方法
2018/08/03 Python
解决pandas.DataFrame.fillna 填充Nan失败的问题
2018/11/06 Python
python实现对变位词的判断方法
2020/04/05 Python
python 使用elasticsearch 实现翻页的三种方式
2020/07/31 Python
详解Python中的GIL(全局解释器锁)详解及解决GIL的几种方案
2021/01/29 Python
意大利奢侈品综合电商网站:MODES
2019/12/14 全球购物
Big Green Smile法国:领先的英国有机和天然产品在线商店
2021/01/02 全球购物
上课玩手机检讨书
2014/02/08 职场文书
电气工程及其自动化专业毕业生自荐信
2014/06/21 职场文书
2014年幼儿园小班工作总结
2014/12/04 职场文书
同学聚会致辞集锦
2015/07/28 职场文书
情况说明书格式及范文
2019/06/24 职场文书