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实现的MySQL通用查询程序
Mar 11 PHP
随时给自己贴的图片加文字的php水印
Mar 16 PHP
php结合表单实现一些简单功能的例子
Jun 04 PHP
批量去除PHP文件中bom的PHP代码
Mar 13 PHP
php 备份数据库代码(生成word,excel,json,xml,sql)
Jun 23 PHP
解析PHP中ob_start()函数的用法
Jun 24 PHP
PHP计算当前坐标3公里内4个角落的最大最小经纬度实例
Feb 26 PHP
php+jQuery+Ajax简单实现页面异步刷新
Aug 08 PHP
php使用curl实现简单模拟提交表单功能
May 15 PHP
php实现支持中文的文件下载功能示例
Aug 30 PHP
php实现简单的权限管理的示例代码
Aug 25 PHP
PHP使Laravel为JSON REST API返回自定义错误的问题
Oct 16 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 curl 并发最佳实践代码分享
2012/09/05 PHP
破解.net程序(dll文件)编译和反编译方法
2013/01/31 PHP
解析php扩展php_curl.dll不加载的解决方法
2013/06/26 PHP
分享十款最出色的PHP安全开发库中文详细介绍
2015/03/22 PHP
php中file_exists函数使用详解
2015/05/08 PHP
php结合md5实现的加密解密方法
2016/01/25 PHP
PHPCMS忘记后台密码的解决办法
2016/10/30 PHP
javascript动态判断html元素并执行不同的操作
2014/06/16 Javascript
javascript中eval解析JSON字符串
2016/02/27 Javascript
Javascript类型系统之undefined和null浅析
2016/07/13 Javascript
jQuery.Validate表单验证插件的使用示例详解
2017/01/04 Javascript
JS表单验证方法实例小结【电话、身份证号、Email、中文、特殊字符、身份证号等】
2017/02/14 Javascript
从零开始学习搭建React脚手架项目
2018/08/23 Javascript
小程序点击图片实现png转jpg
2019/10/22 Javascript
使用Vue实现简单计算器
2020/02/25 Javascript
使用JavaScript实现贪吃蛇游戏
2020/09/29 Javascript
[00:32]10月24、25日 辉夜杯外卡赛附加赛开赛!
2015/10/23 DOTA
python 随机数使用方法,推导以及字符串,双色球小程序实例
2017/09/12 Python
pandas创建新Dataframe并添加多行的实例
2018/04/08 Python
python 批量修改 labelImg 生成的xml文件的方法
2019/09/09 Python
python3实现绘制二维点图
2019/12/04 Python
Python操作redis和mongoDB的方法
2019/12/19 Python
HTML5 embed 标签使用方法介绍
2013/08/13 HTML / CSS
NUK奶瓶美国官网:NUK美国
2016/09/26 全球购物
加拿大的标志性百货公司:Hudson’s Bay(哈得逊湾)
2019/09/03 全球购物
中国旅游网站:途牛旅游网
2019/09/29 全球购物
法国床上用品商店:La Compagnie du lit
2019/12/26 全球购物
在浏览器端如何得到服务器端响应的XML数据
2012/11/24 面试题
化学教师自荐信范文
2013/12/28 职场文书
五一服装活动方案
2014/01/11 职场文书
基层领导干部“四风”问题批评与自我批评
2014/09/23 职场文书
软弱涣散基层党组织整改方案
2014/10/25 职场文书
2015年保洁员工作总结
2015/05/04 职场文书
《多彩的民间艺术》教学反思
2016/02/16 职场文书
MySQL query_cache_type 参数与使用详解
2021/07/01 MySQL
js面向对象编程OOP及函数式编程FP区别
2022/07/07 Javascript