php 网上商城促销设计实例代码


Posted in PHP onFebruary 17, 2012

大体的思想,每一个促销要新建一个促销类,有专门的开关来控制是否生效。
用商品里面的促销识别码来判断具体调用哪一个促销实例。
首先,在添加商品的时候,分两步,第一步是添加状态,第二步是把购物车内的商品显示这个状态。
一,添加步骤几个重要的点:
1,添加商品之前,遍历所有的促销互斥条件。
例如,某一款商品不可以和另一个商品同时在一个购物车内;或者某个用户权限,不可以购买特定的一件商品等等。
2,添加商品之前,选择特定的促销实例,来进行添加之前的操作。
注:第二点与第一点的区别在于1是要遍历所有的促销实例,而2是单独的一条。
3,添加商品后,根据特定的促销实例,所要进行的操作。

/** 
* 向购物车内添加商品 
* @param int $goods_id 商品ID 
* @param string $goods_spec 商品规格 
* @param int $goods_number 商品数量 
* @param string $promote_name 商品参加活动 
* @return bool 
*/ 
public function goodsAdd($goods_id, $goods_spec, $goods_number, $promote_name) 
{ 
//获取所有有效的促销实例 
$rules = $this->_getAllRuleInstance(); 
foreach($this->_rules as $instance) 
{ 
//换礼互斥判断 
if(!$instance->goodsExclusion($goods_id, $goods_spec)) 
{ 
return false; 
} 
} 
//获取商品单独的促销实例 
$rule = $this->_getRuleInstance($promote_name); 
//添加商品之前操作 
if($rule->beforeGoodsAdd()) 
{ 
$rule->goodsAdd($goods_id, $goods_spec, $goods_number); 
//添加商品之后操作 
return $rule->afterGoodsAdd(); 
} 
return false; 
}

/** 
* 获取可用规则实例列表 
* @return array 
*/ 
private function _getAllRuleInstance() 
{ 
if(empty($this->_rules)) 
{ 
$dir = dirname(__FILE__).'/Cart/Rule/'; 
$dir_handle = opendir($dir); 
while($file = readdir($dir_handle)) 
{ 
if(is_file($dir.$file)) 
{ 
$instance = $this->_getRuleInstance(substr($file, 0, strpos($file, '.'))); 
if($instance->enabled()) 
{ 
$this->_rules[] = $instance; 
} 
} 
} 
} 
return $this->_rules; 
}

/** 
* 获取购物车规则类 
* @param string $name 规则名称 
* @return Bll_Shop_Cart_Rule 
*/ 
private function _getRuleInstance($name) 
{ 
$rule_name = 'Bll_Shop_Cart_Rule_'.$name; 
try 
{ 
Zend_Loader::loadClass($rule_name); 
$this->_rule = new $rule_name(); 
$this->_rule->setCart($this); 
return $this->_rule; 
}catch (Exception $e) 
{ 
Bll_LogWriter::logException('购物规则对象加载异常. rule_name:'.$rule_name); 
throw new Exception('购物规则对象加载异常.'); 
} 
}

这里主要用到的促销是,判断某一个人是否有添加这个商品的权限,打折等。
二,遍历购物车商品的操作
这一步要执行关键操作是遍历所有促销策略的检查列表函数。
这里常常可以用到的促销是满多少钱,送赠品,买二送一等等。
/** 
* 获取购物车内商品清单对象列表 
* @return array Bll_Shop_Cart_Rule 
*/ 
public function goodsViewList() 
{ 
$list = $this->getGoodsList(); 
// 在列表时检查购物车内商品列表 
$rules = $this->_getAllRuleInstance(); 
foreach($this->_rules as $instance) 
{ 
$instance->setGoodsList($list)->goodsCheckList(); 
$this->_tip_rules[] = $instance; 
} 
//获取最新购物车列表 
$goods_list = $this->_cart->getGoodsList(); 
return $goods_list; 
}

第三,提交订单之前的操作
有一些类型的促销,比如某人有打折的权限,当下完订单后,这个打折的权限就被用掉了;或者在下单之前要先检查这个订单的金额,如果小于多少就不准下这个订单等等。
以上这些都会用到提交订单之前的操作。
PHP 相关文章推荐
PHP生成静态页
Nov 25 PHP
Ajax实时验证用户名/邮箱等是否已经存在的代码打包
Dec 01 PHP
使用PHP破解防盗链图片的一个简单方法
Jun 07 PHP
PHP的魔术常量__METHOD__简介
Jul 08 PHP
php获取YouTube视频信息的方法
Feb 11 PHP
使用PHP和JavaScript判断请求是否来自微信内浏览器
Aug 18 PHP
使用PHP uniqid函数生成唯一ID
Nov 18 PHP
php微信开发之自定义菜单完整流程
Oct 08 PHP
Yii2框架类自动加载机制实例分析
May 02 PHP
Laravel 简单实现Ajax滚动加载示例
Oct 22 PHP
php中加密解密DES类的简单使用方法示例
Mar 26 PHP
php实现断点续传大文件示例代码
Jun 19 PHP
php中通过curl模拟登陆discuz论坛的实现代码
Feb 16 #PHP
初品cakephp 入门基础
Feb 16 #PHP
php线性表顺序存储实现代码(增删查改)
Feb 16 #PHP
用PHP实现Ftp用户的在线管理
Feb 16 #PHP
PHP排序算法的复习和总结
Feb 15 #PHP
php网上商城购物车设计代码分享
Feb 15 #PHP
php后台多用户权限组思路与实现程序代码分享
Feb 13 #PHP
You might like
php 多个submit提交表单 处理方法
2009/07/07 PHP
php实现将数组转换为XML的方法
2015/03/09 PHP
wordpress安装过程中遇到中文乱码的处理方法
2015/04/21 PHP
alixixi runcode.asp的代码不错的应用
2007/08/08 Javascript
基于jQuery图片平滑连续滚动插件
2009/04/27 Javascript
JavaScript Event学习第七章 事件属性
2010/02/07 Javascript
js压缩工具 yuicompressor 使用教程
2010/03/31 Javascript
node.js中的fs.fchownSync方法使用说明
2014/12/16 Javascript
浅谈Javascript中的Function与Object
2015/01/26 Javascript
win7下安装配置node.js+express开发环境
2015/12/06 Javascript
基于JavaScript实现网页倒计时自动跳转代码
2015/12/28 Javascript
jQuery grep()方法详解及实例代码
2016/10/30 Javascript
Node.js测试中的Mock文件系统详解
2016/11/21 Javascript
Angular实现一个简单的多选复选框的弹出框指令实例
2017/04/25 Javascript
ES6解构赋值实例详解
2017/10/31 Javascript
Nodejs调用Dll模块的方法
2018/09/17 NodeJs
vue实现重置表单信息为空的方法
2018/09/29 Javascript
vue element upload组件 file-list的动态绑定实现
2019/10/11 Javascript
微信小程序select下拉框实现源码
2019/11/08 Javascript
Javascript执行上下文顺序的深入讲解
2020/11/04 Javascript
[41:20]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS DK
2014/05/26 DOTA
Python使用xlrd模块操作Excel数据导入的方法
2015/05/26 Python
python实现在windows服务中新建进程的方法
2015/06/30 Python
网站渗透常用Python小脚本查询同ip网站
2017/05/08 Python
Windows下PyCharm安装图文教程
2018/08/27 Python
Python如何筛选序列中的元素的方法实现
2019/07/15 Python
40个你可能不知道的Python技巧附代码
2020/01/29 Python
使用TensorFlow搭建一个全连接神经网络教程
2020/02/06 Python
Python paramiko使用方法代码汇总
2020/11/20 Python
FILA德国官方网站:来自意大利的体育和街头服饰品牌
2019/07/19 全球购物
Michael Kors英国官网:美国奢侈品品牌
2019/11/13 全球购物
意大利消费电子产品购物网站:SLG Store
2019/12/26 全球购物
数控技校生自我鉴定
2014/03/02 职场文书
家装业务员岗位职责
2015/04/03 职场文书
幼儿园教师心得体会范文
2016/01/21 职场文书
Eclipse+Java+Swing+Mysql实现电影购票系统(详细代码)
2022/01/18 Java/Android