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之COOKIE支持详解
Sep 20 PHP
调整优化您的LAMP应用程序的5种简单方法
Jun 26 PHP
PHP以指定字段为索引返回数据库所取的数据数组
Jun 30 PHP
Apache实现Web Server负载均衡详解(不考虑Session版)
Jul 05 PHP
PHP中设置一个严格30分钟过期Session面试题的4种答案
Jul 30 PHP
Linux下PHP连接Oracle数据库
Aug 20 PHP
PHP验证码生成原理和实现
Jan 24 PHP
PHP实现的通过参数生成MYSQL语句类完整实例
Apr 11 PHP
php禁用函数设置及查看方法详解
Jul 25 PHP
php实现异步将远程链接上内容(图片或内容)写到本地的方法
Nov 30 PHP
Smarty3配置及入门语法
Feb 22 PHP
php之可变变量的实例详解
Sep 12 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
第十三节--对象串行化
2006/11/16 PHP
PHP 命名空间实例说明
2011/01/27 PHP
php curl基本操作详解
2013/07/23 PHP
js Date自定义函数 延迟脚本执行
2010/03/10 Javascript
目前流行的JavaScript库的介绍及对比
2013/09/29 Javascript
用js控制组织结构图可以任意拖拽到指定位置
2014/01/17 Javascript
深入理解javascript构造函数和原型对象
2014/09/23 Javascript
jQuery实现仿百度首页滑动伸缩展开的添加服务效果代码
2015/09/09 Javascript
jquery采用oop模式class类的使用示例
2016/01/22 Javascript
针对JavaScript中this指向的简单理解
2016/08/26 Javascript
巧用weui.topTips验证数据的实例
2017/04/17 Javascript
详解Next.js页面渲染的优化方案
2019/01/27 Javascript
bootstrap中的导航条实例代码详解
2019/05/20 Javascript
Vue 实现前端权限控制的示例代码
2019/07/09 Javascript
Vue项目中数据的深度监听或对象属性的监听实例
2020/07/17 Javascript
linux下python抓屏实现方法
2015/05/22 Python
python中将\\uxxxx转换为Unicode字符串的方法
2018/09/06 Python
python scp 批量同步文件的实现方法
2019/01/03 Python
python实现KNN分类算法
2019/10/16 Python
python3反转字符串的3种方法(小结)
2019/11/07 Python
python通过安装itchat包实现微信自动回复收到的春节祝福
2020/01/19 Python
对tensorflow 中tile函数的使用详解
2020/02/07 Python
django美化后台django-suit的安装配置操作
2020/07/12 Python
Python依赖包迁移到断网环境操作
2020/07/13 Python
Python实现LR1文法的完整实例代码
2020/10/25 Python
英国玛莎百货美国官网:Marks & Spencer美国
2018/11/06 全球购物
Sisley法国希思黎中国官网:享誉全球的奢华植物美容品牌
2019/06/30 全球购物
业务员岗位职责范本
2013/12/15 职场文书
事务机电主管工作职责
2014/02/25 职场文书
中餐厅经理岗位职责
2014/04/11 职场文书
投标保密承诺书
2014/05/19 职场文书
大学生村官个人总结
2015/02/15 职场文书
民间借贷纠纷起诉书
2015/08/03 职场文书
中考百日冲刺决心书
2015/09/22 职场文书
2015年物业管理员工工作总结
2015/10/15 职场文书
详解分布式系统中如何用python实现Paxos
2021/05/18 Python