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中HTTP方式下的Gzip压缩传输方法举偶
Feb 15 PHP
无需重新编译php加入ftp扩展的解决方法
Feb 07 PHP
PHP删除目录及目录下所有文件的方法详解
Jun 06 PHP
PHP获得数组交集与差集的方法
Jun 10 PHP
php实现将Session写入数据库
Jul 26 PHP
php在数据库抽象层简单使用PDO的方法
Nov 03 PHP
Yii统计不同类型邮箱数量的方法
Oct 18 PHP
PHP带节点操作的无限分类实现方法详解
Nov 09 PHP
利用switch语句进行多选一判断的实例代码
Nov 14 PHP
用PHP的socket实现客户端到服务端的通信实例详解
Feb 04 PHP
php面向对象之反射功能与用法分析
Mar 29 PHP
php数值转换时间及时间转换数值用法示例
May 18 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
点评山进PR-D3L三波段收音机
2021/03/02 无线电
PHP新手上路(十三)
2006/10/09 PHP
浅析php中如何在有限的内存中读取大文件
2013/07/02 PHP
php版微信公众账号第三方管理工具开发简明教程
2016/09/23 PHP
理解Javascript_15_作用域分配与变量访问规则,再送个闭包
2010/10/20 Javascript
jquery checkbox实现单选小例
2013/11/27 Javascript
如何调试异步加载页面里包含的js文件
2014/10/30 Javascript
chrome调试javascript详解
2015/10/21 Javascript
JS基于构造函数实现的菜单滑动显隐效果【测试可用】
2016/06/21 Javascript
js oncontextmenu事件使用详解
2017/03/25 Javascript
vue 2.0组件与v-model详解
2017/03/27 Javascript
微信小程序商城项目之侧栏分类效果(1)
2017/04/17 Javascript
微信小程序 slider的简单实例
2017/04/19 Javascript
js获取地址栏参数的两种方法
2017/06/27 Javascript
关于Promise 异步编程的实例讲解
2017/09/01 Javascript
vue-cli项目优化方法- 缩短首屏加载时间
2018/04/01 Javascript
JS 设计模式之:单例模式定义与实现方法浅析
2020/05/06 Javascript
[01:08:10]2014 DOTA2国际邀请赛中国区预选赛 SPD-GAMING VS LGD-CDEC
2014/05/22 DOTA
[00:32]2018DOTA2亚洲邀请赛Mineski出场
2018/04/04 DOTA
Python选择排序、冒泡排序、合并排序代码实例
2015/04/10 Python
使用python遍历指定城市的一周气温
2017/03/31 Python
python生成九宫格图片
2018/11/19 Python
python3实现二叉树的遍历与递归算法解析(小结)
2019/07/03 Python
Python Selenium 之数据驱动测试的实现
2019/08/01 Python
python 多进程并行编程 ProcessPoolExecutor的实现
2019/10/11 Python
pandas 数据类型转换的实现
2020/12/29 Python
日本最大的药妆连锁店:Matsukiyo松本清药妆店
2017/11/23 全球购物
保安的辞职报告怎么写
2014/01/20 职场文书
幼儿园教育教学反思
2014/01/31 职场文书
合同意向书范本
2014/07/30 职场文书
品牌推广活动策划方案
2014/08/19 职场文书
2014年科研工作总结
2014/12/03 职场文书
一年级数学下册复习计划
2015/01/17 职场文书
2016党员干部廉政准则学习心得体会
2016/01/20 职场文书
Golang 如何实现函数的任意类型传参
2021/04/29 Golang
Dubbo+zookeeper搭配分布式服务的过程详解
2022/04/03 Java/Android