pubdate 是什么?
pubdate 是 "publish date"(发布日期)的缩写,在织梦DedeCMS中,它是一个数据库字段,主要用于存储文章或文档被正式发布到网站上的时间点。

(图片来源网络,侵删)
- 数据类型:在
dede_archives(文章主表) 中,pubdate字段的数据类型是int(10),存储的是一个 Unix 时间戳。 - 核心作用:记录文章的发布时间,是网站内容排序(如最新文章)、时间归档、以及前台显示发布日期的基础。
pubdate 字段在数据库中的位置
pubdate 字段主要位于以下几个核心表中:
-
dede_archives(文章数据表):- 这是最重要的表,存储了文章的基本信息,如标题、内容、作者、ID等。
pubdate字段就在这里,与id、typeid、title等字段并列。
-
dede_arctiny(文章摘要表):- 这个表是
dede_archives的一个简化版,用于提高首页等列表页的查询速度。 - 它同样包含
pubdate字段,存储的也是 Unix 时间戳。
- 这个表是
-
dede_addonarticle(文章附加表):
(图片来源网络,侵删)- 当文章模型使用了“文章”以外的模型(如图集、软件下载等)时,文章的扩展属性(如出处、作者简介等)会存放在这个表里。
- 注意:
pubdate字段不在这个表中,它始终在主表dede_archives中。
如何获取和使用 pubdate?
在织梦的模板文件(.htm)中,我们主要通过底层模板变量来调用 pubdate 的值。
在列表页(如 index.htm, list.htm)中调用
列表页通常使用循环 {dede:list} 或 {dede:arclist} 标签来遍历文章。
示例代码:
{dede:arclist row='10' titlelen='30'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<!-- 方式一:直接调用Unix时间戳(不推荐) -->
<span>发布时间戳:[field:pubdate/]</span>
<!-- 方式二:使用日期格式化函数(强烈推荐) -->
<span>发布时间:[field:pubdate function="MyDate('Y-m-d H:i:s',@me)"/]</span>
<!-- 方式三:使用简化的日期格式化函数 -->
<span>发布时间:[field:pubdate function='strftime("%Y-%m-%d",@me)'/]</span>
</li>
{/dede:arclist}
代码解析:

(图片来源网络,侵删)
[field:pubdate/]:直接输出pubdate字段的值,即一个长整形的 Unix 时间戳(1712345678)。[field:pubdate function="MyDate('Y-m-d H:i:s',@me)"/]:- 这是织梦推荐的标准用法。
function="..."表示调用一个PHP函数。MyDate()是织梦内置的日期格式化函数。'Y-m-d H:i:s'是你想要的日期格式,Y代表四位年份,m代表月份,d代表日,H代表小时,i代表分钟,s代表秒。@me代表当前字段的原始值,也就是pubdate的时间戳。
[field:pubdate function='strftime("%Y-%m-%d",@me)'/]:- 这是使用PHP原生的
strftime()函数,同样可以格式化日期,但MyDate()更为常用和强大。
- 这是使用PHP原生的
页(如 article_article.htm)中调用
页使用 {dede:field} 标签来调用当前文章的字段。
示例代码:
<h1>[field:title/]</h1>
<div class="info">
<span>作者:[field:writer/]</span>
<span>发布时间:[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
<span>来源:[field:source/]</span>
</div>
pubdate 与 senddate 的区别
这是一个非常容易混淆但重要的概念。
| 特性 | pubdate (发布日期) |
senddate (录入日期) |
|---|---|---|
| 含义 | 文章发布到前台的时间。 | 文章录入到后台系统的时间。 |
| 修改方式 | 在后台编辑文章时,可以手动修改发布日期。 | 通常由系统自动生成,在文章被创建时记录,一般不可直接修改。 |
| 应用场景 | - 文章排序:按最新发布时间排序。 - 时间归档:按年、月归档文章。 - 前台显示:向用户展示“发布于X年X月”。 |
- 内部管理:用于识别文章的录入顺序。 - 防作弊:可以防止用户通过修改发布时间来“欺骗”搜索引擎或用户,使其文章看起来是新发布的。 |
| 常见操作 | 可被手动修改,常用于“定时发布”功能,或在发布后发现时间错误时进行修正。 | 不可被轻易修改,是文章的“原始创建时间”。 |
简单总结:
senddate 是文章的“出生证明”,记录它何时被创建。pubdate 是文章的“上牌日期”,记录它何时对公众可见,除非有特殊需求(如定时发布或修正错误),否则 pubdate 和 senddate 在创建文章时是相同的。
常见问题与技巧
如何按发布时间排序?
在列表页的标签中,使用 orderby 属性。
{dede:arclist row='10' orderby='pubdate'}
<!-- 这将按 pubdate 从新到旧排序 -->
{/dede:arclist}
{dede:arclist row='10' orderby='pubdate' orderway='asc'}
<!-- 这将按 pubdate 从旧到新排序 (asc=升序) -->
{/dede:arclist}
为什么我的 pubdate 显示不正确?
- 时间戳错误:检查后台文章编辑页面的发布日期是否设置正确。
- 时区问题:确保服务器和织梦系统的时区设置一致,可以在后台“系统” -> “系统基本参数” -> “核心设置”中检查“站点时区”。
- 模板标签错误:检查模板中调用
pubdate的标签是否书写正确,特别是function部分。
如何实现“定时发布”功能?
织梦的后台文章编辑器中,有一个“发布时间”选项,你可以设置一个未来的时间,然后勾选“仅保存,暂不发布”,文章会在你设定的时间点自动变为“已发布”状态,并更新 pubdate 字段。
pubdate 是织梦DedeCMS中一个功能强大且基础的字段,它不仅记录了文章的发布时间,更是实现内容动态排序、时间归档和前台信息展示的关键,掌握如何正确调用和格式化 pubdate,以及理解它与 senddate 的区别,是进行织梦二次开发和日常维护的必备技能。
