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 相关文章推荐
首页四格,首页五格For6.0(GBK)(UTF-8)[12种组合][9-18][版主安装测试通过]
Sep 24 PHP
PHP分页效率终结版(推荐)
Jul 01 PHP
PHP限制页面只能在微信自带浏览器访问的代码
Jan 15 PHP
php导入csv文件碰到乱码问题的解决方法
Feb 10 PHP
php实现读取超大文件的方法
Jul 28 PHP
ThinkPHP调用common/common.php函数提示错误function undefined的解决方法
Aug 25 PHP
PHP图片处理之使用imagecopyresampled函数实现图片缩放例子
Nov 19 PHP
PHP实现动态柱状图改进版
Mar 30 PHP
PHP用户验证和标签推荐的简单使用
Oct 31 PHP
thinkphp5 + ajax 使用formdata提交数据(包括文件上传) 后台返回json完整实例
Mar 02 PHP
TP5框架使用QueryList采集框架爬小说操作示例
Mar 26 PHP
tp5框架前台无限极导航菜单类实现方法分析
Mar 29 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
escape unescape的php下的实现方法
2007/04/27 PHP
浅析Yii2缓存的使用
2016/05/10 PHP
禁止刷新,回退的JS
2006/11/25 Javascript
JQuery对checkbox操作 (循环获取)
2011/05/20 Javascript
Jquery 动态循环输出表格具体方法
2013/11/23 Javascript
JavaScript异步回调的Promise模式封装实例
2014/06/07 Javascript
轻松创建nodejs服务器(8):非阻塞是如何实现的
2014/12/18 NodeJs
JQuery中上下文选择器实现方法
2015/05/18 Javascript
在JavaScript的AngularJS库中进行单元测试的方法
2015/06/23 Javascript
逐一介绍Jquery data()、Jquery stop()、jquery delay()函数(详)
2015/11/04 Javascript
javascript实现随机显示星星特效
2016/01/28 Javascript
使用AJAX实现Web页面进度条的实例分享
2016/05/06 Javascript
jQuery事件委托之Safari
2016/07/05 Javascript
JS排序之快速排序详解
2017/04/08 Javascript
利用Vue.js实现求职在线之职位查询功能
2017/07/03 Javascript
vue中使用echarts制作圆环图的实例代码
2018/07/27 Javascript
详解微信小程序自定义组件的实现及数据交互
2019/07/22 Javascript
一文看懂如何简单实现节流函数和防抖函数
2019/09/05 Javascript
jQuery 查找元素操作实例小结
2019/10/02 jQuery
高效jQuery选择器的5个技巧实例分析
2019/11/26 jQuery
Node.js API详解之 console模块用法详解
2020/05/12 Javascript
python实现的二叉树定义与遍历算法实例
2017/06/30 Python
深入flask之异步非堵塞实现代码示例
2018/07/31 Python
window7下的python2.7版本和python3.5版本的opencv-python安装过程
2019/10/24 Python
python的json中方法及jsonpath模块用法分析
2019/12/06 Python
python urllib和urllib3知识点总结
2021/02/08 Python
巴西宠物商店:Cobasi
2019/04/19 全球购物
Clarks其乐鞋荷兰官网:Clarks荷兰
2019/07/05 全球购物
部队领导证婚词
2014/01/12 职场文书
生产部厂长助理职位说明书
2014/03/03 职场文书
电钳工人个人求职信
2014/05/10 职场文书
英语四级考试作弊检讨书
2014/09/29 职场文书
村主任个人对照检查材料
2014/10/01 职场文书
开学典礼观后感
2015/06/15 职场文书
mysql如何配置白名单访问
2021/06/30 MySQL
如何创建一个创建MySQL数据库中的datetime类型
2022/03/21 MySQL