您现在的位置是:首页 > cms教程 > phpcms教程phpcms教程

phpcms实现动态价格实现方法代码示例

杨舟察2025-05-25phpcms教程已有人查阅

导读什么是动态价格(自命名)?--一般来说商品有个固定的价格,随着节假日或者促销活动可能会发生价格变化,结束后又恢复原价,如果每次价格变化都需要修改价格,那么不仅在时间上不好把握

什么是动态价格(自命名)?--一般来说商品有个固定的价格,随着节假日或者促销活动可能会发生价格变化,结束后又恢复原价,如果每次价格变化都需要修改价格,那么不仅在时间上不好把握,也需要消耗更多的人力。 为了适应这种情况,我们可以给价格在预期的时间段赋予一个新的价格,那么,动态价格就是--给未来的时间段设置一个新的价格,当这个时间到来的时候自动采用新的价格。
要点:
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);
}

本文标签:

很赞哦! ()

相关教程

相关源码

  • 自适应极简风个人博客文章自媒体网站模板基于PbootCMS开源内核开发的极简个人博客模板,采用移动优先设计原则,通过Media Query技术实现320px至1920px六级分辨率适配,确保在手机、平板及PC设备上均呈现良好的视觉体验。查看源码
  • (自适应)蓝色英文外贸电子科技产品带三级栏目网站模板为外贸企业设计的英文网站模板,基于PbootCMS系统开发。突出多语言支持和国际化布局,三级栏目结构清晰展示产品分类,响应式设计确保更好客户在移动端和PC端获得一致的专业体验。查看源码
  • (自适应)光伏测试仪器电站运维设备网站源码免费下载本模板为光伏检测设备与电站运维服务企业设计,采用PbootCMS内核开发,具备完整的设备展示、技术文档管理及客户服务功能模块。通过自适应结构与SEO优化框架,有效提升企业在移动端和搜索引擎中的专业形象。查看源码
  • 帝国cms7.5模板情感文学名言名句心情文章类源码下载带手机本模板基于帝国CMS7.5开发,为情感文学类网站设计。整体风格温馨雅致,布局合理清晰,特别适合建设情书分享、文学作品展示类网站。模板采用响应式设计,能够自动适配各种终端设备。查看源码
  • pbootcms响应式蓝色旅游旅行社pbootcms网站源码下载为旅游公司、旅行社定制的响应式网站模板,聚焦旅游线路展示、景点推荐及预约服务场景。采用PbootCMS内核开发,自适应技术确保PC与手机端数据实时同步查看源码
  • (PC+WAP)绿色环保建筑设备通用行业pbootcms源码下载通过模块调整可适配园林景观、装配式建筑、绿色装修等生态建设相关领域。预制绿色建材展示、能耗模拟等专业模块,集成项目案例、环保工艺等建筑行业特色内容结构,测试数据包含LEED认证体系查看源码
分享笔记 (共有 篇笔记)
验证码:

本栏推荐