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

结语

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

相关推荐
千里马学框架2 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台2 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone2 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc2 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo2 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077002 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼2 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
AFinalStone2 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui
JMchen2 天前
属性动画原理与高级动画实现
android·kotlin·canvas
AFinalStone2 天前
Android7 SystemUI 源码解析(二)启动流程深度解析
android·systemui