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 相关文章推荐
phpMyAdmin 链接表的附加功能尚未激活的问题
Aug 01 PHP
如何使用PHP获取指定日期所在月的开始日期与结束日期
Aug 01 PHP
php $_SERVER windows系统与linux系统下的区别说明
Feb 14 PHP
PHP使用内置dir类实现目录遍历删除
Mar 31 PHP
typecho插件编写教程(二):写一个新插件
May 28 PHP
PHP使用PHPexcel导入导出数据的方法
Nov 14 PHP
PHP Imagick完美实现图片裁切、生成缩略图、添加水印
Feb 22 PHP
PHP的Laravel框架结合MySQL与Redis数据库的使用部署
Mar 21 PHP
PHP中的Trait 特性及作用
Apr 03 PHP
详解PHP归并排序的实现
Oct 18 PHP
php实现用户注册密码的crypt加密
Jun 08 PHP
thinkphp3.2实现在线留言提交验证码功能
Jul 19 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
利用ThinkPHP内置的ThinkAjax实现异步传输技术的实现方法
2011/12/19 PHP
phpword插件导出word文件时中文乱码问题处理方案
2014/08/19 PHP
PHP正则验证Email的方法
2015/06/15 PHP
详解PHP执行定时任务的实现思路
2015/12/21 PHP
讲解WordPress中用于获取评论模板和搜索表单的PHP函数
2015/12/28 PHP
浅谈PHP SHA1withRSA加密生成签名及验签
2019/03/18 PHP
jquery 事件执行检测代码
2009/12/09 Javascript
关于JavaScript的with 语句的使用方法
2011/05/09 Javascript
javascript与cookie 的问题详解
2013/11/11 Javascript
js 限制input只能输入数字、字母和汉字等等
2013/12/18 Javascript
Backbone.js的Hello World程序实例
2015/06/19 Javascript
javascript实现简单查找与替换的方法
2015/07/22 Javascript
javascript常用正则表达式汇总
2015/07/31 Javascript
JS实现横向拉伸动感伸缩菜单效果代码
2015/09/04 Javascript
基于Vue.js实现简单搜索框
2020/03/26 Javascript
AngularJS1.X学习笔记2-数据绑定详解
2017/04/01 Javascript
EL表达式截取字符串的函数说明
2017/09/22 Javascript
js获取form表单中name属性的值
2019/02/27 Javascript
React中this丢失的四种解决方法
2019/03/12 Javascript
分享一款超好用的JavaScript 打包压缩工具
2020/04/26 Javascript
基于Vant UI框架实现时间段选择器
2020/12/24 Javascript
Python使用urllib2模块抓取HTML页面资源的实例分享
2016/05/03 Python
PyQt5实现简易计算器
2020/05/30 Python
Python 实现还原已撤回的微信消息
2019/06/18 Python
css3实现多个元素依次显示效果
2017/12/12 HTML / CSS
SkinCeuticals官网:美国药妆品牌
2018/04/19 全球购物
质检员的岗位职责
2013/11/15 职场文书
颐和园的导游词
2015/01/30 职场文书
大学自主招生自荐信(2016精选篇)
2016/01/28 职场文书
党员公开承诺书(2016最新版)
2016/03/24 职场文书
2019入党申请书格式
2019/06/25 职场文书
redis实现共同好友的思路详解
2021/05/26 Redis
Java使用jmeter进行压力测试
2021/07/09 Java/Android
nginx实现动静分离的方法示例
2021/11/07 Servers
git stash(储藏)的用法总结
2022/06/25 Servers
前端使用svg图片改色实现示例
2022/07/23 HTML / CSS