Products
96SEO 2025-09-16 11:25 1
DedeCMS作为国内广泛使用的开源内容管理系统,因其灵活和易用性深受站长喜爱。只是 在使用过程中,许多用户会遇到文章编辑后“发布时间”被自动更新的问题,甚至出现发布时间变成“1970年1月1日”的尴尬状况。本文将深入分析该问题产生的根源, 并提供详细可行的解决方案,帮助你在编辑文章时保持原发布时间不变,彻底避免1970年时间错误。
不少DedeCMS用户反馈,当他们修改已发布的文章内容后系统默认会把文章的发布时间改为当前时间,这导致网站前端的文章排序发生变化,不利于SEO优化和内容管理。一边, 更严重的是有时发布时间直接显示为“1970年1月1日”,这是UNIX时间戳为0时对应的时间点,说明程序读取或存储时间数据时出现了异常。
此类问题大多发生在DedeCMS 5.7及其相近版本, 也可能由于模板调用格式、数据库字段设置以及采集插件等因素共同影响造成。了解问题本质是解决这一系列异常的关键。
DedeCMS默认行为是:每次编辑并保存文章都会自动更新时间,以保证排序和最新动态展示。但很多站长希望保持原有发布时间不变,以免破坏网站内容结构和SEO权重。这就需要对系统源码做一定程度修改,实现“不更新时间”的功能。
DedeCMS核心代码负责更新文章数据一般位于 /dede/archives_do.php
或 /dede/article_edit.php
。重点是找到涉及"pubdate", "senddate", "uptime"这类字段赋值及更新的位置进行调整。
操作前务必备份:
- 打开dede/article_edit.php
- 搜索关键词 $nowtime = time;
, 通常此变量用于设置当前保存操作的时间戳。
// 原始示例
$nowtime = time;
$sql = "UPDATE `#@__archives` SET pubdate='$nowtime', uptime='$nowtime' WHERE id=$aid";
- 将自动赋值当前时间改为保留已有时间, 即保留原字段值而非强制覆盖:
// 修改示例
// $nowtime = time; // 注释掉当前获取当前时间
// 保持原来的pubdate,不再强制更新
$sql = "UPDATE `#@__archives` SET uptime='".time."' WHERE id=$aid";
// 或者如果想完全禁止更新时间也可以去掉uptime字段更新
// $sql = "UPDATE `#@__archives` SET ... WHERE id=$aid";
- 注意,如果你只想禁止"pubdate"更改,可以仅删除对应赋值语句;但如果你需要一边维护其他“更新时间”字段,请谨慎处理,否则可能影响缓存刷新等机制。
- 在后台编辑页面表单(如/dede/templets/article_edit.htm
)中查找关于“发布时间”input控件, 比方说:
- 可以选择隐藏该输入框,或者让其readonly防止误提交新值;或者后台处理时优先使用旧数据,而非前端传来的新值替换。比方说:
// PHP接收部分伪代码
if) {
$pubdate = $arcRow; // 使用数据库旧值
} else {
$pubdate = strtotime;
}
// 示例SQL: 设置缺失日期为当前日期
UPDATE dede_archives SET pubdate=UNIX_TIMESTAMP WHERE pubdate=0 OR pubdate IS NULL;
- 在模板中引用该函数代替直接调用strtotime等容易出错的方法即可避免前台出现异常年份显示情况。
Demand feedback