广告按时段切换是精准营销的常见手段,可在工作日推送 B 端产品、周末推送 C 端促销。织梦原生支持时间控制,再配合 PHP 判断可实现多时段轮播。
一、原生时段设置原理
织梦广告表 dede_myad 包含 timeset、starttime、endtime、normbody、expbody 字段。当 timeset=1 时,系统比较当前时间戳,落在区间内显示 normbody,否则显示 expbody。
二、原生时段配置步骤
步骤1:后台 → 模块 → 广告管理 → 编辑广告。
步骤2:勾选"限时广告",设置开始时间与结束时间。
步骤3:填写正常显示内容(normbody)与过期内容(expbody)。
步骤4:保存并重新生成静态页面。
该方式适合"活动期间显示 A 广告,活动结束显示 B 广告"的简单场景,无法满足一天内多时段切换。
三、多时段 PHP 判断方案
对于"上午显示 A、下午显示 B、夜间显示 C"的精细需求,需在模板中使用 PHP 嵌入:
<?php
$hour=date('H');
if($hour >=8 && $hour < 12){
echo GetAd('morning_banner');
}elseif($hour >=12 && $hour < 18){
echo GetAd('afternoon_banner');
}else{
echo GetAd('night_banner');
}
?>
建议:将判断代码封装到
/include/common.func.php 中的 GetAdByHour() 函数,避免模板污染。四、结合计划任务定时切换
对于广告主更换频繁的场景,可使用宝塔计划任务每 30 分钟执行一次 SQL:
-- 切换显示状态
UPDATE dede_myad SET timeset=1
WHERE adname IN('home_top') AND NOW() BETWEEN starttime AND endtime;
五、常见问题原因分析
5.1 时段判断错误
原因:服务器时区与北京时间不一致,导致 date('H') 返回错误小时。
解决:在 php.ini 设置 date.timezone=Asia/Shanghai,或在程序入口加入 date_default_timezone_set('Asia/Shanghai')。
5.2 缓存导致广告不切换
原因:启用了织梦静态生成或 CDN 缓存,PHP 代码在 HTML 缓存中已固化。
注意:时段广告区域必须排除静态缓存,可使用
<!--dynamic-->...<!--/dynamic--> 标记或将其封装为 AJAX 异步请求。六、性能与转化建议
多时段切换时,建议预加载所有时段广告 HTML 到前端,通过 JavaScript 根据 new Date().getHours() 客户端切换,避免 PHP 反复执行。同时通过百度统计自定义维度记录广告时段,对比不同时段的点击率与转化率。
七、行动指引
落地时段广告方案时,建议先从"工作日/周末"二段切换切入,跑一周数据后再细分小时段。配合 A/B 测试对比点击率,逐步找到全站最佳广告时段分布模型,让广告收益最大化。