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 中文和编码判断代码
May 16 PHP
用PHP读取超大文件的实例代码
Apr 01 PHP
PHP 正则表达式之正则处理函数小结(preg_match,preg_match_all,preg_replace,preg_split)
Oct 05 PHP
php Session存储到Redis的方法
Nov 04 PHP
codeigniter集成ucenter1.6双向通信的解决办法
Jun 12 PHP
Yii实现多数据库主从读写分离的方法
Dec 29 PHP
php自动获取关键字的方法
Jan 06 PHP
php实现可运算的验证码
Nov 10 PHP
Laravel程序架构设计思路之使用动作类
Jun 07 PHP
Yii2.0 RESTful API 基础配置教程详解
Dec 26 PHP
浅谈PHP SHA1withRSA加密生成签名及验签
Mar 18 PHP
PHP正则之正向预查与反向预查讲解与实例
Apr 06 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实现mysql连接池效果实现代码
2018/01/25 PHP
PHP实现正则表达式分组捕获操作示例
2018/02/03 PHP
Laravel框架运行出错提示RuntimeException No application encryption key has been specified.解决方法
2019/04/02 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
2019/11/21 PHP
图片按比例缩放函数
2006/06/26 Javascript
原型方法的不同写法居然会影响调试的解决方法
2007/03/08 Javascript
用js实现的一个Flash滚动轮换显示图片代码生成器
2007/03/14 Javascript
js下利用控制器载入对应脚本
2010/07/17 Javascript
JS复制到剪贴板示例代码
2013/10/30 Javascript
js实现二级菜单渐隐显示
2015/11/03 Javascript
Ztree新增角色和编辑角色回显问题的解决
2016/10/25 Javascript
Bootstrap基本布局实现方法详解
2016/11/25 Javascript
javascript函数的四种调用模式
2017/01/08 Javascript
js实现3D图片展示效果
2017/03/09 Javascript
利用jQuery解析获取JSON数据
2017/04/08 jQuery
基于JavaScript+HTML5 实现打地鼠小游戏逻辑流程图文详解(附完整代码)
2017/11/02 Javascript
three.js欧拉角和四元数的使用方法
2020/07/26 Javascript
Vue+penlayers实现多边形绘制及展示
2020/12/24 Vue.js
[10:21]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster 选手采访
2021/03/11 DOTA
python检查URL是否正常访问的小技巧
2017/02/25 Python
Python查找两个有序列表中位数的方法【基于归并算法】
2018/04/20 Python
Python实现带参数的用户验证功能装饰器示例
2018/12/14 Python
python实现剪切功能
2019/01/23 Python
Python实现的ftp服务器功能详解【附源码下载】
2019/06/26 Python
Python for i in range ()用法详解
2020/09/18 Python
基于python监控程序是否关闭
2020/01/14 Python
pyqt5 textEdit、lineEdit操作的示例代码
2020/08/12 Python
Sephora丝芙兰澳洲官方网站:国际知名化妆品购物
2016/10/27 全球购物
JoJo Maman Bébé爱尔兰官网:英国最受欢迎的精品母婴品牌
2020/12/20 全球购物
实习生自荐信范文
2013/11/13 职场文书
初中校园之声广播稿
2014/01/15 职场文书
医学专业毕业生推荐信
2014/07/12 职场文书
课内比教学心得体会
2014/09/09 职场文书
2014年小学教师工作总结
2014/11/10 职场文书
公司催款律师函
2015/05/27 职场文书
Python 中的Sympy详细使用
2021/08/07 Python