phpcms 实现动态价格
什么是动态价格(自命名)?—— 一般来说商品有个固定的价格,随着节假日或者促销活动可能会发生价格变化,结束后又恢复原价,如果每次价格变化都需要修改价格,那么不仅在时间上不好把握,也需要消耗更多的人力。 为了适应这种情况,我们可以给价格在预期的时间段赋予一个新的价格,那么,动态价格就是——给未来的时间段设置一个新的价格,当这个时间到来的时候自动采用新的价格。
要点:
1.优先级:特定时间 > 节假日(不带年份) > 常规价格
2.如何读取数据
3.如何转为图表
效果图:
动态价格添加及列表
核心代码:
/**
* 获取动态价格节点数据
* @param type $pid
* @param type $qbdate
* @param type $qedate
* @return type
*/
public function get_data($pid,$qbdate="",$qedate="")
{
//查询时间容错
if($qbdate>$qedate){
$tmpdate=$qbdate;
$qbdate=$qedate;
$qedate=$tmpdate;
}
$today=mktime(0,0,0,date('m'),date('d'),date('Y'));
//is_date 是app functions global.funs.php中的自定义函数
if(empty($qbdate) || !is_date($qbdate)) $qbdate=strtotime("-60 days",$today); //默认查询开始年份
if(empty($qedate) || !is_date($qedate)) $qedate=strtotime("+60 days",$today); //获取景点信息
$this->table_name =$this->db_tablepre.'travel_scenic';
$pid = intval($pid);
if(!$pid) return false;
$r = $this->get_one(array('id'=>$pid));
$data['pid']=$r['id'];
$data['title']=$r['title'];
$data['price']=$r['price'];
$data['cost']=$r['cost'];
$data['qbdate']=$qbdate;
$data['qedate']=$qedate; $days=ceil(abs($qbdate-$qedate)/86400); //查询开始日期与结束日期的天数 //给时间段内的数组赋初值(基本价格)
for($i=0;$i<=$days;$i++){
$the_day=strtotime("+".$i." days",$qbdate);
$y=intval(date('Y',$the_day));
$m=intval(date('m',$the_day));
$d=intval(date('d',$the_day));
$price_data[$y.'_'.$m.'_'.$d]=$data['price'];
$cost_data[$y.'_'.$m.'_'.$d]=$data['cost'];
$desc_data[$y.'_'.$m.'_'.$d]="";
} //SQL查询准备
$qbyear=date('Y',$qbdate);
$qbmonth=date('m',$qbdate);
$qbday=date('d',$qbdate); $qeyear=date('Y',$qedate);
$qemonth=date('m',$qedate);
$qeday=date('d',$qedate); $this->table_name = 'travel_scenic_dynprice';
//此处用循环来解决跨年度查询的问题,每次查询一年的,然后合并;
for($qyear=$qbyear;$qyear<=$qeyear;$qyear++){ $this->query("select *,
DATE_FORMAT(concat(CASE byear WHEN 0 THEN '".$qyear."' ELSE byear END ,'-',bmonth,'-',bday),'%Y-%m-%d') as bdate,
DATE_FORMAT(concat(CASE eyear WHEN 0 THEN '".$qyear."' ELSE eyear END ,'-',emonth,'-',eday),'%Y-%m-%d') as edate
from phpcms_travel_scenic_dynprice
where pid=".$pid." and priority=1 and status=1
and DATE_FORMAT(concat(CASE byear WHEN 0 THEN '".$qyear."' ELSE byear END ,'-',bmonth,'-',bday),'%Y-%m-%d') >='".$qbyear."-".$qbmonth."-".$qbday."'
and DATE_FORMAT(concat(CASE eyear WHEN 0 THEN '".$qyear."' ELSE eyear END ,'-',emonth,'-',eday),'%Y-%m-%d')<='".$qeyear."-".$qemonth."-".$qeday."'
order by id asc"); $r2=$this->fetch_array(); foreach ($r2 as $key => $value) {
$tmp_bdate=strtotime($r2[$key]['bdate']);
$tmp_edate=strtotime($r2[$key]['edate']);
$days=ceil(abs($tmp_bdate-$tmp_edate)/86400);
//echo $days;
for($i=0;$i<=$days;$i++){
$the_day=strtotime("+".$i." days",$tmp_bdate);
$y=intval(date('Y',$the_day));
$m=intval(date('m',$the_day));
$d=intval(date('d',$the_day));
$price_data[$y.'_'.$m.'_'.$d]=$r2[$key]['dynprice'];
$cost_data[$y.'_'.$m.'_'.$d]=$r2[$key]['dyncost'];
$desc_data[$y.'_'.$m.'_'.$d]=$r2[$key]['description'];
} }
//合并每年的数组
$price_data+=$price_data;
$cost_data+=$cost_data;
} //print_r($price_data);
//此处针对特定时间的价格进行处理。
$this->query("select *,
DATE_FORMAT(concat(byear ,'-',bmonth,'-',bday),'%Y-%m-%d') as bdate,
DATE_FORMAT(concat(eyear,'-',emonth,'-',eday),'%Y-%m-%d') as edate
from phpcms_travel_scenic_dynprice
where pid=".$pid." and priority=2 and status=1
and DATE_FORMAT(concat(byear,'-',bmonth,'-',bday),'%Y-%m-%d') >='".$qbyear."-".$qbmonth."-".$qbday."'
and DATE_FORMAT(concat(eyear,'-',emonth,'-',eday),'%Y-%m-%d')<='".$qeyear."-".$qemonth."-".$qeday."'
order by id asc");
$r3=$this->fetch_array(); foreach ($r3 as $key => $value) {
$tmp_bdate=strtotime($r3[$key]['bdate']);
$tmp_edate=strtotime($r3[$key]['edate']);
$days=ceil(abs($tmp_bdate-$tmp_edate)/86400);
for($i=0;$i<=$days;$i++){
$the_day=strtotime("+".$i." days",$tmp_bdate);
//echo date("Y-m-d",$the_day)." ";
$y=intval(date('Y',$the_day));
$m=intval(date('m',$the_day));
$d=intval(date('d',$the_day));
$price_data[$y.'_'.$m.'_'.$d]=$r3[$key]['dynprice'];
$cost_data[$y.'_'.$m.'_'.$d]=$r3[$key]['dyncost'];
$desc_data[$y.'_'.$m.'_'.$d]=$r3[$key]['description'];
} } //去除price_data和cost_data连续都相同的节点
$i=1;
$count=count($price_data);
foreach ($price_data as $key => $value) {
if($i==1){
$first_node=$price_data[$key];
$first_node2=$cost_data[$key];
}
if($i!=1 && $i!=$count){
if($price_data[$key]==$first_node && $cost_data[$key]==$first_node2 ){
unset($price_data[$key]);
unset($cost_data[$key]);
unset($desc_data[$key]);
}else{
$first_node=$price_data[$key];
$first_node2=$cost_data[$key];
}
}
$i++;
} $data['price_data']=$price_data;
$data['cost_data']=$cost_data;
$data['desc_data']=$desc_data;
//print_r($data);
return $data; } /**
* 根据数据生成chart所需的data数据
* @param type $data
* @return type
*/
public function get_chartdata($data)
{
$price_data=$data['price_data'];
$cost_data=$data['cost_data'];
$desc_data=$data['desc_data'];
$chartdata="[";
foreach ($price_data as $key => $value) {
$keys=explode("_",$key);
$chartdata.="[new Date(".$keys[0].", ".($keys[1]-1).", ".$keys[2]."), ".$price_data[$key].",'".$desc_data[$key]."'],";
}
$chartdata=rtrim($chartdata,',').']'; $chartdata2="[";
foreach ($cost_data as $key => $value) {
$keys=explode("_",$key);
$chartdata2.="[new Date(".$keys[0].", ".($keys[1]-1).", ".$keys[2]."), ".$cost_data[$key].",'".$desc_data[$key]."'],";
}
$chartdata2=rtrim($chartdata2,',').']';
return array('pid'=>$data['pid'],
'title'=>$data['title'],
'qbdate'=>$data['qbdate'],
'qedate'=>$data['qedate'],
'chartprice'=>$chartdata,
'chartcost'=>$chartdata2);
}
phpcms 实现动态价格的更多相关文章
- 趴一趴京东的Ajax动态价格页面
AJAX,异步加载技术!!! 之前在网上看过很多朋友有一种疑问,为什么在看京东网页的源代码里面看不到价格或则折扣一类的数据,而在网页上正常显示却能看到?...之前我也没有想到是AJAX,因为我写写爬虫 ...
- Paypal 支付功能的 C# .NET / JS 实现
说明 最近用到了 Paypal 支付功能,英语一般般的我也不得不硬着头皮踩一踩这样的坑.经过近乎半个月的作,终于实现了简单的支付功能,那么首先就说说使用 Paypal 必定要知道的几点(当前日期 20 ...
- Coding and Paper Letter(四十五)
资源整理. 1 Coding: 1.Python库gempy,一种基于Python的开源三维结构地质建模软件,它允许从界面和方向数据隐式(即自动)创建复杂的地质模型. 它还支持随机建模以解决参数和模型 ...
- python小练习2
结果 代码 鞋子价格=0 男孩价格=0 爆米花价格=0 计算完毕=0 for 鞋子动态价格 in range(0,20): if (计算完毕==1): break; #print("鞋子动态 ...
- PHPCMS V9多站点[站群功能]动态设置与静态设置子站内容URL
今天我们来讲解下 PHPCMS V9的站群功能的 动态站点与静态站点的配置 站群站点,分为动态站点,和静态站点两种设置方法: 静态的,就是将栏目和内容都了HTML 文件,我们先讲解下,站群的操作: 建 ...
- jQuery形式可以计算,它包含了无线电的变化价格,select价格变化,删除行动态计算加盟
jQuery能够计算的表单,包含单选改变价格,select改变价格,动态加入删除行计算 各种表单情况的计算 演示 JavaScript Code <script type="text/ ...
- 如何用phpcms将静态网页生成动态网页?
在前两篇随笔中已经简单介绍了phpcms,那么现在让我们来看一下如何用phpcms将静态网页生成动态网页? 1.在templates文件夹下新建模板文件夹ceshi(名字可以自己随笔起) 2.在ces ...
- 动态搜索图书:可以按书名、作者、出版社以及价格范围进行搜索。(在IDEA中mybatis)
中午找了好久.好多人写的都驴头不对马嘴.自己实现后.才发现是真的不麻烦.也不知道人家咋想的.写的死麻烦还没用.老是搜出sql语句写死的.我要的是动态滴.自己写出后.总结了一下 1.按照书名.作者.出版 ...
- php 数组动态添加实现代码(最土团购系统的价格排序)
最近在实现最土团购系统的价格排序功能,需要对$oc数组进行扩展,经过测试用下面的方法即可. 核心代码如下: <?php $now=time(); $oc = array( 'team_type' ...
随机推荐
- [osg]osgDB的加载机制,使用3DS插件做参考(转,整理现有osgDB资料)
参考:http://blog.sina.com.cn/s/blog_7cdaf8b60102uzu3.html http://blog.csdn.net/wang15061955806/article ...
- centos7(debian,manjora,freebsd)命令及安装mysql、git、gpg、gogs,安装docker,zsh,chrome
最小安装: 1. 选择English 2. DATE & TIME 修改好本地时间 SOFTWARE SELECTION默认的Minimal Install就好 INSTALLATION DE ...
- SCWS中文分词PHP扩展详细安装说明
因最近写的一段代码,需要用到中文分词,在网上找了一下,发现了scws这个不错的插件,故根据文档安装使用,下面记录下安装的全过程 系统:centos 安装scws wget http://www.xun ...
- fib博弈
链接:https://www.nowcoder.com/acm/contest/77/G来源:牛客网 幼儿园开学了,为了让小盆友们能尽可能的多的享受假期.校长大人决定让小盆友分批到校,至于每批学生来 ...
- IOS-工程师Mac上的必备软件
前言 iOS工程师一直都是那么的高逼格,用的是Mac电脑,耍的是iPhone手机,哇咔咔~~ 但是,作为一名iOS开发工程师,我们除了高逼格外,还必须是全能的.你不会点UI设计.不会点后台语 ...
- linux hosts.equiv设置解析
hosts.equiv文件的用途与格式 一. hosts.equiv 文件的用途 /etc/hosts.equiv 和 $HOME/.rhosts 定义了哪些计算机和用户可以不用提供口令就在本地计算机 ...
- JSON.js 源码学习..
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 用 Unity 和 HTC Vive 实现高级 VR 机制(1)
原文:Advanced VR Mechanics With Unity and the HTC Vive Part 1 作者:Eric Van de Kerckhove 译者:kmyhy VR 从来没 ...
- 每天一个linux命令(性能、优化):【转载】lsof命令
lsof(list open files)是一个列出当前系统打开文件的工具.在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件.所以如传输控制协议 ...
- HDU 2154:跳舞毯
跳舞毯 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...