织梦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(未审核)的文章,并执行审核操作,作为一道保险。

结语

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

相关推荐
2501_9371454110 小时前
TV 影视大全:多品类聚合 稳定播放优化版
android·源码·源代码管理
followYouself10 小时前
Gradle、AGP、Plugin插件基本知识
android·gradle·plugin·agp
我命由我1234510 小时前
Android 开发问题:Unresolved reference: kapt
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
黄昏晓x10 小时前
数据库 ---- 表的约束
android·数据库
克里斯蒂亚诺更新10 小时前
Android Studio创建一个新项目
android·ide·android studio
AI玫瑰助手11 小时前
Python基础:列表的切片与嵌套列表使用技巧
android·开发语言·python
Jason__Young11 小时前
Activity生命周期调度
android
Fate_I_C11 小时前
Android Navigation组件核心问题深度解析
android·kotlin·navigation
撩得Android一次心动11 小时前
Android Room 数据库详解【使用篇】
android·数据库·room·jetpack
恋猫de小郭12 小时前
Jetpack Compose 1.11 正式版发布,下一代的全新控件和样式 API,你必须知道
android·前端·flutter