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 相关文章推荐
第十二节 类的自动加载 [12]
Oct 09 PHP
用PHP实现读取和编写XML DOM代码
Apr 07 PHP
php递归实现无限分类生成下拉列表的函数
Aug 08 PHP
PHP+Mysql日期时间如何转换(UNIX时间戳和格式化日期)
Jul 15 PHP
php 启动时报错的简单解决方法
Jan 27 PHP
在PHP中运行Linux命令并启动SSH服务的例子
Jun 12 PHP
ThinkPHP访问不存在的模块跳转到404页面的方法
Jun 19 PHP
php对二维数组进行相关操作(排序、转换、去空白等)
Nov 04 PHP
php短信接口代码
May 13 PHP
Yii数据模型中rules类验证器用法分析
Jul 15 PHP
php加速缓存器opcache,apc,xcache,eAccelerator原理与配置方法实例分析
Mar 02 PHP
Nginx+php配置文件及原理解析
Dec 09 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
JTrackBar水平拖动效果
2007/07/15 Javascript
JS中toFixed()方法引起的问题如何解决
2012/11/20 Javascript
获取数组中最大最小值方法js代码(自写)
2013/08/12 Javascript
jquery cookie的用法总结
2013/11/18 Javascript
js生成随机数的方法实例
2015/10/16 Javascript
轻松实现js选项卡切换效果
2016/09/24 Javascript
浅谈jquery中next与siblings的区别
2016/10/27 Javascript
jQuery EasyUI Accordion可伸缩面板组件使用详解
2017/02/28 Javascript
jQuery实现web页面樱花坠落的特效
2017/06/01 jQuery
微信小程序的部署方法步骤
2018/09/04 Javascript
详解React 服务端渲染方案完美的解决方案
2018/12/14 Javascript
如何使用JavaScript实现栈与队列
2019/06/24 Javascript
vue中注册自定义的全局js方法
2019/11/15 Javascript
基于element-ui封装可搜索的懒加载tree组件的实现
2020/05/22 Javascript
全面解析Python的While循环语句的使用方法
2015/10/13 Python
Windows下python2.7.8安装图文教程
2016/05/26 Python
Python 实现数据库更新脚本的生成方法
2017/07/09 Python
Python最火、R极具潜力 2017机器学习调查报告
2017/12/11 Python
python基础教程项目四之新闻聚合
2018/04/02 Python
python 实现多线程下载m3u8格式视频并使用fmmpeg合并
2019/11/15 Python
selenium+Chrome滑动验证码破解二(某某网站)
2019/12/17 Python
python将字典内容写入json文件的实例代码
2020/08/12 Python
python 常见的反爬虫策略
2020/09/27 Python
python链表类中获取元素实例方法
2021/02/23 Python
西班牙英格列斯百货英国官网:El Corte Inglés英国
2017/10/30 全球购物
XMLHttpRequest对象在IE和Firefox中创建方式有没有不同
2016/03/23 面试题
大学生物业管理求职信
2013/10/24 职场文书
物理教育专业毕业生推荐信
2013/11/03 职场文书
总裁办公室主任职责
2014/01/02 职场文书
给妈妈洗脚活动方案
2014/08/16 职场文书
《微笑着面对生活》优秀演讲稿范文
2014/09/23 职场文书
财务检查整改报告
2014/11/06 职场文书
大学生个人学年总结
2015/02/15 职场文书
邓小平文选读书笔记
2015/06/29 职场文书
postgresql无序uuid性能测试及对数据库的影响
2021/06/11 PostgreSQL
python中的装饰器该如何使用
2021/06/18 Python