- 后台文章编辑模板文件 (
article_add.htm和article_edit.htm):用于在界面上增加时间选择的输入框。 - 后台处理逻辑文件 (
add.php和edit.php):用于接收前端提交的时间数据,并保存到数据库中。
下面我将为你提供详细、分步的教程,请根据你的 DedeCMS 版本(主要是 5.x 和 7.x)选择对应的方法。

⚠️ 重要提示:操作前备份!
在进行任何文件修改之前,务必备份你即将要修改的文件,以防操作失误导致网站无法正常使用。
通用方法(适用于 DedeCMS 5.x 及 7.x)
这个方法最基础,也最稳定,通过直接修改模板和处理文件来实现。
步骤 1:修改后台文章添加模板 (article_add.htm)
-
找到文件: 通过 FTP 或你的主机文件管理器,进入
/dede/目录,找到article_add.htm文件。 -
定位代码: 在文件中找到
<input name="pubdate" type="text" id="pubdate" value="<?php echo $nowtime=mytime(); ?>" size="12" class="input-text" readonly />这一行代码,它通常在标题、来源等字段的附近。
(图片来源网络,侵删) -
修改代码: 将
readonly属性去掉,并增加一个时间选择器,方便用户选择,修改后的代码如下:<!-- 原始代码 (大约第 220 行左右) --> <td width="180">发布时间:</td> <td> <input name="pubdate" type="text" id="pubdate" value="<?php echo $nowtime=mytime(); ?>" size="12" class="input-text" readonly /> <img src="images/calendar.gif" width="16" height="16" border="0" style="cursor:pointer" onclick="showCalendar('pubdate', this.src)" /> </td> <!-- 修改后的代码 --> <td width="180">发布时间:</td> <td> <input name="pubdate" type="text" id="pubdate" value="<?php echo $nowtime=mytime(); ?>" size="12" class="input-text" /> <img src="images/calendar.gif" width="16" height="16" border="0" style="cursor:pointer" onclick="showCalendar('pubdate', this.src)" /> <span class="lit">(留空则为当前时间)</span> </td>修改说明:
- 我们删除了
readonly属性,这样你就可以直接在输入框里输入时间了。 - 保留了
<img>标签,这样你依然可以点击小图标弹出日历进行选择。 - 增加了提示文字
(留空则为当前时间),让用户更清楚如何操作。
- 我们删除了
步骤 2:修改后台文章编辑模板 (article_edit.htm)
添加文章和编辑文章的模板是分开的,所以编辑页面也需要做同样的修改。
-
找到文件: 在
/dede/目录下找到article_edit.htm文件。
(图片来源网络,侵删) -
定位并修改代码: 同样地,找到包含
pubdate的<input>标签,执行与article_add.htm完全相同的修改。
步骤 3:修改后台处理逻辑 (add.php 和 edit.php)
这部分是核心,确保你输入的时间能被正确保存到数据库。
-
修改
add.php(添加文章时):- 找到文件:
/dede/add.php - 定位代码:找到
if(empty($typeid))之前的代码段,通常会有$pubdate变量的定义。 - 修改代码:增加一个判断,如果用户没有输入时间,则使用当前时间。
// 原始代码 (大约在 30-40 行) // $pubdate = $senddate ? $senddate : $mktime; // $sortrank = $senddate ? $senddate : $mktime; // 修改后的代码 if(empty($pubdate)) { $pubdate = $mktime; } $sortrank = $pubdate; - 找到文件:
-
修改
edit.php(编辑文章时):- 找到文件:
/dede/edit.php - 定位代码:找到
//更新数据库的注释下方,通常在$upquery这条 SQL 语句之前。 - 修改代码:同样增加对
$pubdate的判断。
// 原始代码 (大约在 200 行左右) // $upquery = "UPDATE `#@__archives` SET // typeid='$typeid',title='$title',shorttitle='$shorttitle',color='$color',writer='$writer',source='$source', // litpic='$litpic',pubdate='$pubdate',sortrank='$sortrank',mid='$arcmember',description='$description', // keywords='$keywords',redirecturl='$redirecturl',arcrank='$arcrank',click='$click',ismake='$ismake', // channel='$channelid',senddate='$senddate',mtype='$mtype',dutyadmin='$adminid' // WHERE id='$aid' "; // 修改后的代码 (将 pubdate 和 sortrank 的处理逻辑提前) if(empty($pubdate)) { $pubdate = $mktime; } $sortrank = $pubdate; $upquery = "UPDATE `#@__archives` SET typeid='$typeid',title='$title',shorttitle='$shorttitle',color='$color',writer='$writer',source='$source', litpic='$litpic',pubdate='$pubdate',sortrank='$sortrank',mid='$arcmember',description='$description', keywords='$keywords',redirecturl='$redirecturl',arcrank='$arcrank',click='$click',ismake='$ismake', channel='$channelid',senddate='$senddate',mtype='$mtype',dutyadmin='$adminid' WHERE id='$aid' "; - 找到文件:
步骤 4:清空缓存并测试
- 登录 DedeCMS 后台。
- 点击顶部菜单的“系统” -> “一键更新站点” -> “更新系统缓存”。
- 尝试发布一篇新文章,检查“发布时间”字段是否可以手动输入和修改。
- 尝试编辑一篇旧文章,检查是否同样可以修改时间。
仅适用于 DedeCMS 7.x 的方法(更推荐)
DedeCMS 7.x 版本在后台管理中已经内置了“发布时间”的修改功能,但可能被默认隐藏或需要稍作调整,如果你的版本是 7.x,建议优先尝试此方法,因为它更符合官方的设计,也更稳定。
-
检查后台设置:
- 登录后台,进入“系统” -> “系统基本参数” -> “核心设置”。
- 找到是否开启了“允许自定义发布时间”之类的选项,如果有的话,确保它是“是”。
- 在 DedeCMS 7.x 中,这个功能通常是默认开启的,只是界面可能不直观。
-
直接在编辑界面修改:
- 在后台发布或编辑文章时,找到“发布时间”这个字段。
- 你会发现它旁边有一个日历图标,并且输入框默认是可编辑的(不像 5.x 版本默认是
readonly)。 - 你可以直接点击输入框修改时间,或者点击日历图标选择时间。
- 如果输入框是
readonly状态,说明你网站的模板文件可能被修改过,或者使用了旧版的模板,你可以参照 方法一 中的步骤 1 和 2,去掉readonly属性即可。
对于 DedeCMS 7.x 用户,方法二 是最简单、最标准的做法,如果方法二不满足你的需求(比如你想让这个字段变成必填等),再使用 方法一 进行深度定制。
高级应用:如何在前台显示自定义时间?
你可能会问,我设置了自定义时间,但前台文章列表和详情页显示的时间还是不对,怎么办?
这是因为前台模板调用的是 pubdate 这个字段,但它的格式可能不是你想要的。
解决方案:修改前台模板
-
找到前台模板文件:
- 文章列表页模板:
/templets/default/list_article.htm - 页模板:
/templets/default/article_article.htm
- 文章列表页模板:
-
找到时间调用标签:
- 通常是这样的形式:
[field:pubdate function='strftime("%Y-%m-%d %H:%M:%S",@me)'/] - 或者更简单的:
[field:pubdate function='GetDateTimeMK(@me)'/]
- 通常是这样的形式:
-
修改格式: 你可以根据需要修改
strftime函数的格式化字符串。"%Y-%m-%d %H:%M:%S"显示为2025-10-27 15:30:00"%Y-%m-%d"显示为2025-10-27"%m-%d"显示为10-27
你只想显示年月日,就把标签修改为:
[field:pubdate function='strftime("%Y-%m-%d",@me)'/]
通过以上步骤,你就可以完全掌控 DedeCMS 中文章的提交时间了,希望这个详细的教程能帮到你!
