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加密解密的代码
Oct 09 PHP
php中的一个中文字符串截取函数
Feb 14 PHP
检测png图片是否完整的php代码
Sep 06 PHP
php 变量未定义等错误的解决方法
Jan 12 PHP
PHP查询网站的PR值
Oct 30 PHP
php中hashtable实现示例分享
Feb 13 PHP
PHP资源管理框架Assetic简介
Jun 12 PHP
PHP之sprintf函数用法详解
Nov 12 PHP
PHP实现的简单缓存类
Jul 29 PHP
PHP中的switch语句的用法实例详解
Oct 21 PHP
浅析Yii2 GridView实现下拉搜索教程
Apr 22 PHP
thinkPHP简单调用函数与类库的方法
Mar 15 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代码
2012/09/14 PHP
php获取文章内容第一张图片的方法示例
2017/07/03 PHP
解决form中action属性后面?传递参数 获取不到的问题
2017/07/21 PHP
javascript 同时在IE和FireFox获取KeyCode的代码
2010/02/07 Javascript
js 多种变量定义(对象直接量,数组直接量和函数直接量)
2010/05/24 Javascript
来自国外的页面JavaScript文件优化
2010/12/08 Javascript
广泛收集的jQuery拖放插件集合
2012/04/09 Javascript
jquery获取节点名称
2015/04/26 Javascript
js实现的Easy Tabs选项卡用法实例
2015/09/06 Javascript
深入探究AngularJS框架中Scope对象的超级教程
2016/01/04 Javascript
深入理解js数组的sort排序
2016/05/28 Javascript
JavaScript排序算法动画演示效果的实现方法
2016/10/18 Javascript
微信小程序开发之视频播放器 Video 弹幕 弹幕颜色自定义实例
2016/12/08 Javascript
AngularJS+bootstrap实现动态选择商品功能示例
2017/05/17 Javascript
在vue项目中使用Nprogress.js进度条的方法
2018/01/31 Javascript
使用rollup打包JS的方法步骤
2018/12/05 Javascript
vue-cli中使用高德地图的方法示例
2019/03/28 Javascript
使用JS来动态操作css的几种方法
2019/12/18 Javascript
微信小程序仿淘宝热搜词在搜索框中轮播功能
2020/01/21 Javascript
详解vue 组件
2020/06/11 Javascript
js前端传json后台接收‘‘被转为quot的问题解决
2020/11/12 Javascript
[00:02]DOTA2新版本使用PA至宝后暴击展示
2014/11/19 DOTA
python杀死一个线程的方法
2015/09/06 Python
python读取中文txt文本的方法
2018/04/12 Python
Win10下python 2.7.13 安装配置方法图文教程
2018/09/18 Python
解决python中遇到字典里key值为None的情况,取不出来的问题
2018/10/17 Python
python ddt数据驱动最简实例代码
2019/02/22 Python
Keras实现DenseNet结构操作
2020/07/06 Python
HTML5 Canvas+JS控制电脑或手机上的摄像头实例
2014/05/03 HTML / CSS
英国女性时尚鞋类的潮流制造者:Koi Footwear
2018/10/19 全球购物
什么叫做SQL注入,如何防止
2016/10/04 面试题
洗发水广告词
2014/03/13 职场文书
综合办公室岗位职责
2015/04/11 职场文书
使用python+pygame开发消消乐游戏附完整源码
2021/06/10 Python
纯CSS实现一个简单步骤条的示例代码
2022/07/15 HTML / CSS
戴尔Win11系统no bootable devices found解决教程
2022/09/23 数码科技