问题根源分析
DedeCMS的文章时间主要有两个字段:

pubdate(发布时间):文章首次发布的时间,通常情况下,这个时间不应该被随意修改。uptime(更新时间):文章最后一次被修改的时间,这个字段才应该在编辑文章时被更新。
在旧版本的DedeCMS中,编辑文章后不更新时间是一个普遍存在的“特性”或“Bug”,新版本有所改善,但如果你修改了核心文件或使用了不兼容的模板,问题依然可能出现。
解决方案(按推荐顺序)
检查并修改 article_edit.php 文件(最核心、最根本的解决方法)
这是最常见的原因,因为编辑文章的核心逻辑就在这个文件里,它可能在保存时没有执行更新时间的SQL语句。
-
找到文件: 登录你的FTP或主机控制面板,找到
dede目录(你的后台目录),然后进入article_edit.php文件。 -
定位代码: 用代码编辑器(如Notepad++, VS Code等)打开这个文件,按
Ctrl+F搜索关键词uptime。
(图片来源网络,侵删) -
分析并修改: 你可能会找到类似下面这样的代码块(具体行号可能因版本而异):
// ... 其他代码 ... if(empty($typeid)) { ShowMsg('请选择栏目!', '-1'); exit(); } // 保存到主表 $query = "UPDATE `#@__archives` SET typeid='$typeid', title='$title', shorttitle='$shorttitle', writer='$writer', source='$source', litpic='$litpic', keywords='$keywords', description='$description' WHERE id='$aid'"; $dsql->ExecuteNoneQuery($query); // ... 其他代码 ...问题所在:你会发现,在更新
#@__archives表的SQL语句中,没有包含 `uptime = '".GetMkTime(time())."' " 这一句。 -
应用修复: 在上面的
SET语句中,手动添加uptime字段的更新,修改后的代码应该像这样:// 保存到主表 $query = "UPDATE `#@__archives` SET typeid='$typeid', title='$title', shorttitle='$shorttitle', writer='$writer', source='$source', litpic='$litpic', keywords='$keywords', description='$description', uptime='".GetMkTime(time())."' // <-- 在这里添加 updateTime WHERE id='$aid'"; $dsql->ExecuteNoneQuery($query);说明:
(图片来源网络,侵删)GetMkTime(time())是DedeCMS获取当前时间戳并将其转换为数据库所需格式的函数。- 把这行代码添加到
SET语句的最后一项,后面用逗号隔开(除了最后一项)。
-
保存并测试: 保存
article_edit.php文件,然后回到后台重新编辑一篇文章,点击“保存”,再次查看文章,你会发现“更新时间”已经变成当前时间了。
检查并修改 templets/article_edit.htm 模板文件
问题可能出在前端模板上,虽然不常见,但模板文件中可能隐藏了一些JavaScript逻辑,或者表单字段有问题。
-
找到文件: 在
dede目录下,找到templets文件夹,然后进入article_edit.htm文件。 -
检查表单: 检查表单是否正确提交了所有必要的数据,通常情况下,编辑页面是不需要手动提供更新时间的,这个值应该由后台PHP代码自动生成,所以模板文件本身问题不大,但可以检查一下是否有误删或修改了隐藏的表单字段。
-
检查JavaScript: 搜索文件中是否有
uptime相关的JavaScript代码,如果有的话,看看它是否被错误地注释掉了或逻辑有误,但通常编辑页面的时间都是由PHP后端控制的,前端JS只是用来显示。如果你对PHP不熟悉,这个方案可以暂时跳过,优先使用方案一。
检查是否有缓存问题
DedeCMS有强大的缓存机制,有时候修改了文件但看不到效果,可能是缓存导致的。
- 清除后台缓存: 登录DedeCMS后台,进入【系统】->【系统设置】->【清除缓存】,点击“一键更新全部缓存”或“更新系统缓存”。
- 清除浏览器缓存:
按
Ctrl + F5强制刷新浏览器页面,或者清除浏览器缓存后重新登录后台操作。 - 清除模板缓存: 确保你的文章列表页、内容页等模板没有被缓存,可以在后台【生成】->【更新HTML】中,选择“更新栏目HTML”或“更新文档HTML”来触发模板重新编译。
检查数据库字段和权限
这是最极端的情况,但也可以排查一下。
- 检查数据库表结构:
登录你的数据库管理工具(如phpMyAdmin),检查
dede_archives(或你前缀的#___archives)表中是否存在uptime字段,以及其数据类型是否正确(通常是int(10)或int(11)unsigned)。 - 检查数据库用户权限:
确保连接数据库的用户有
UPDATE权限,虽然99.9%的情况下权限都是正常的,但如果你在配置文件中修改了数据库用户,这是一个可以确认的点。
总结与推荐流程
遇到“dede重新编辑文章后不更新日期”的问题,请按照以下步骤操作:
- 首选方案:直接修改
/dede/article_edit.php文件,在更新archives表的SQL语句中添加uptime字段的更新,这是最直接、最有效的解决方法。 - 如果方案一无效:尝试清除所有缓存(后台缓存、浏览器缓存、模板缓存)。
- 如果仍然无效:检查数据库表结构,确认
uptime字段存在且正常。 - 最后考虑:检查
/dede/templets/article_edit.htm模板文件,看是否有异常。
希望这个详细的指南能帮助你解决问题!
