织梦CMS二开实战:打造智能化的审核定时发布功能

前言

在内容运营中,定时发布是提升效率、把握流量节奏的利器。织梦CMS自带的定时发布功能主要针对已审核的文章。但在实际团队协作中,我们常遇到这样的场景:编辑将一批文章设为"待审核"状态,等待运营人员在特定时间点(如工作日早上9点)统一审核并立即发布。原生系统无法满足这种"审核即定时发布"的自动化需求。本文将深入探讨通过二次开发,巧妙实现这一功能。

一、 核心思路剖析

实现该功能的关键在于"拦截"与"重写"。我们并不需要修改核心的审核逻辑,而是通过在后台文章审核操作的关键节点植入自定义代码。

  1. 拦截审核动作 :当管理员在内容列表点击"审核"或"批量审核"时,系统会调用一个特定的PHP文件(通常是WWW.ZbCq.tCsK.Cn或article_edit.phpcontent_list.php中的审核函数)。
  1. 判断定时标志 :在执行审核SQL语句之前,我们先检查该文章是否被设置了"定时发布"标志。这个标志可以存储在一个新增的字段中,例如 diy_pubdate

  2. 重写发布时间 :如果diy_pubdate的值是一个未来的时间,则在审核通过的同时,将文章的核心发布时间字段 pubdate 更新为 diy_pubdate 的值。否则,按系统默认逻辑处理(立即发布)。

二、 具体操作步骤与代码技巧

步骤一:数据表结构扩展

首先,我们需要在文章主表 dede_archives 中增加一个自定义字段,用于存储编辑设定的期望发布时间。

复制代码
ALTER TABLE `dede_archives` ADD `diy_pubdate` INT(10) UNSIGNED DEFAULT '0' COMMENT '自定义定时发布时间';
 
<img i="7380657" src="https://oss-beijing-m8.openstorage.cn/cloud-gc/wx/official-account/image/kolors/2026-04-03/60323810bdf949f9a98aa804c5c89faa.png" />

步骤二:后台内容编辑页嵌入定时字段

修改后台文章编辑页模板(通常是WWW.ZbCq.tCsK.Cn或templets/article_add.htmarticle_edit.htm),在合适的位置(如"文章属性"附近)增加一个日期时间选择框。

复制代码
<tr>
 
    <td class='bline'定时发布(审核后):</td>
 
    <td class='bline'>
 
        <input name="diy_pubdate="<?php echo GetDateTimeMk($arcRow->diy_pubdate); ?>" class="intxt" />
 
        <a href="java:;" ="ShowCalendar('diy_pubdate', 'y-mm-dd hh:ii')">[选择]</a>
 
        <span class="note">(留空则审核后立即发布)</span>
 
    </td>
 
</tr>

同时,需要在文章保存逻辑(article_edit.php)中,增加对 diy_pubdate 的接收和处理,将其转换为时间戳后存入数据库。

步骤三:核心技巧------重写审核逻辑

这是最关键的一步。找到处理审核动作的文件,通常是 content_list.php 中的 ApproveAll 或类似函数。

在其核心审核SQL执行前,加入以下逻辑:

复制代码
// ... 省略之前获取文章ID等代码 ... 1. 先查询出这篇文章的 diy_pubdate
 
    $query = "SELECT diy_pubdate FROM'";
 
    $row = $dsql->GetOne($query);
 
    $diyPubdate = $row['diy_pubdate'];
 
     
 
    // 2. 判断 diy_pubdate 是否为未来时间
 
    $newPubdate = time(); // 默认发布时间为当前时间(即审核即刻发布)
 
    if($diyPubdate > time()) {
 
        $newPubdate = $diyPubdate; // 如果设定了未来时间,则采用它
 
        // (可选)可以在这里添加一条日志,记录此操作
 
    }
 
     
 
    // 3. 构建审核SQL,其中重点是将 pubdate 设置为 $newPubdate
 
    $query = "UPDATE `dede_archives` SET  
 
              arcrank = '0',  
 
              pubdate = '$newPubdate'  
 
             ql->ExecuteNoneQuery($query)) {
 
        // 错误处理
 
    }
 
     
 
    // 4. 同时更新主表后,也需要更新相应附加表的状态,确保生成HTML时时间正确
 
    $query = "UPDATE `dede_addonarticle` SET  
 
              pubdate = '$newPubdate'  
 
             ->ExecuteNoneQuery($query);
 
}
 
// ... 省略后续成功提示等代码 ...

三、 注意事项与优化技巧

  1. 权限与安全:此功能涉及核心数据修改,务必做好权限控制,确保只有管理员才能操作。

  2. 生成HTML :织梦CMS发布文章通常会生成静态HTML。修改pubdate后,系统在审核时即会以新的时间点为准生成HTML文件,无需额外处理。

  3. 批量处理优化 :在批量审核时,上述循环查询可能会对数据库造成压力。可以考虑优化成一条更复杂的SQL语句,通过JOINCASE WHEN来批量更新。

  4. 状态回显 :可以在文章列表页(content_list.php)的模板中,增加一列显示diy_pubdate,让运营人员一目了然地看到哪些文章已设置定时。

  5. 计划任务补充 :为了万无一失,可以结合织梦的计划任务功能,建立一个每日运行的任务,检查是否有diy_pubdate时间已到但arcrank仍为-1(未审核)的文章,并执行审核操作,作为一道保险。

结语

通过以上三个步骤的二次开发,我们成功地将"审核"与"定时发布"两个动作无缝衔接,实现了流程自动化。这不仅极大地减轻了运营人员的工作负担,也使得内容发布策略更加灵活和精准。二开的魅力正在于此:根据实际业务需求,对现有系统进行精准改造,赋能团队,提升效能。

相关推荐
亿坊电商1 小时前
亿坊·零售连锁门店管理系统|全渠道一体化-独立部署_提升经营管理效率!
android·零售
TO_WebNow2 小时前
tp5部署宝塔遇到的问题
android·ide·php·android studio
2501_915909063 小时前
React Native 上架 App Store:项目运行与审核构建的流程
android·ios·小程序·https·uni-app·iphone·webview
jinanwuhuaguo3 小时前
最新更新版本,OpenClaw v2026.4.2 深度解读剖析:Task Flow 重磅回归与安全架构的全面硬化
android·开发语言·人工智能·回归·kotlin·安全架构·openclaw
匆忙拥挤repeat3 小时前
Android Compose 状态:核心api,状态恢复,状态提升,状态容器
android
千里马学框架4 小时前
干货分享:车载音频audio调试开发之dumpsys CarAudioService剖析
android·音视频·面试题·audio·系统开发·车载audio·framework工程师
私人珍藏库4 小时前
[Android] Bilibili音乐播放器Biu安卓版,适配手机-平板-汽车
android·智能手机·电脑
z9209810234 小时前
安卓16 手机系统 super 分区挂载读写 解锁安卓动态分区RW 逻辑分区读写 自由读写 修改分区system vendor、product
android·智能手机·安卓动态分区·解锁动态分区·分区挂载读写
风酥糖4 小时前
Android上部署Linux环境的方案总结对比
android·linux·运维