dede发布时间标签如何使用?

99ANYc3cd6
预计阅读时长 17 分钟
位置: 首页 DEDE建站 正文

这个标签的核心作用是显示文章、栏目或其他内容的发布或更新时间,根据不同的场景和需求,有多种调用方式。

基础发布时间标签(最常用)

这是在文章列表页(如 list_article.htm)或文章内容页(如 article_article.htm)中最常用的标签。

标签代码:

[field:pubdate function='strftime("%Y-%m-%d %H:%M:%S",@me)'/]

参数解析:

  • [field:pubdate ... ]:这是调用文章发布时间字段的固定写法。
  • function='...':表示对获取到的值进行一次函数处理。
  • strftime():是 PHP 中一个强大的格式化时间的函数。
  • "%Y-%m-%d %H:%M:%S":这是格式化字符串,你可以根据自己的喜好修改它。
    • %Y:四位数的年份(2025)
    • %y:两位数的年份(23)
    • %m:两位数的月份(01-12)
    • %d:两位数的天数(01-31)
    • %H:24小时制的小时(00-23)
    • %I:12小时制的小时(01-12)
    • %M:分钟(00-59)
    • %S:秒(00-59)
    • %F:等同于 %Y-%m-%d(2025-10-27)
    • %D:等同于 %m/%d/%y(10/27/23)

使用示例:

  1. 显示 年-月-日 格式:

    [field:pubdate function='strftime("%Y-%m-%d",@me)'/]

    输出效果:2025-10-27

  2. 显示 年/月/日 时:分 格式:

    [field:pubdate function='strftime("%Y/%m/%d %H:%M",@me)'/]

    输出效果:2025/10/27 14:30

  3. 只显示 月-日 格式:

    [field:pubdate function='strftime("%m-%d",@me)'/]

    输出效果:10-27


显示文章更新时间

你可能希望显示文章最后一次更新的时间,而不是最初发布的时间,在 Dedecms 中,文章的更新时间字段通常是 senddate

标签代码:

[field:senddate function='strftime("%Y-%m-%d %H:%M:%S",@me)'/]

使用场景: 在文章列表中,如果文章被修改过,可以显示“更新于:...”的时间,让用户知道内容是新的。

示例(带条件判断): 你可以结合 {dede:field name='pubdate' function='strftime("%Y-%m-%d",@me)'/}{dede:field name='senddate' function='strftime("%Y-%m-%d",@me)'/} 来判断发布时间和更新时间是否一致,如果不一致则显示更新时间。

{dede:field name='pubdate' function='strftime("%Y-%m-%d",@me)'/}
{dede:field name='pubdate' function='strftime("%Y-%m-%d",@me)' != dede:field name='senddate' function='strftime("%Y-%m-%d",@me)'}
    <span style="color: #ff6600;"> (更新于: {dede:field name='senddate' function='strftime("%Y-%m-%d",@me)'/}) </span>
{/dede:field}

这段代码的意思是:先显示发布时间,然后判断发布时间是否不等于更新时间,如果不等于,就追加一个橙色的“更新于...”提示。


在首页、栏目页调用文章发布时间

在首页 (index.htm) 或栏目列表页 (list_x.htm),你需要使用 {dede:arclist} 标签循环调用文章,然后在其中使用 [field:pubdate]

完整示例(在首页调用):

{dede:arclist row='8' titlelen='30'}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
        <span class="time">[field:pubdate function='strftime("%Y-%m-%d",@me)'/]</span>
    </li>
{/dede:arclist}

参数解释:

  • row='8':表示调用 8 篇文章,len='30'`:表示标题最多显示 30 个字符。
  • [field:arcurl/]:文章的链接地址。
  • [field:title/]:文章的标题。
  • [field:pubdate ... ]:就是我们上面讲的发布时间标签。

修改时间显示格式(后台全局设置)

如果你想让整个网站的时间格式统一修改,可以在后台进行全局设置,这样就不需要在每个模板文件里都写一遍 function 了。

操作路径: 登录 Dedecms 后台 -> 系统 -> 系统基本参数 -> 核心设置

在“核心设置”页面中,找到 “时间格式化” 这一栏,默认值通常是 Y-m-d H:i:s,你可以在这里直接修改为你想要的格式,Y/m/dm-d

优点:

  • 一改全改:修改后,所有使用默认时间标签的地方(如 [field:pubdate/])都会自动应用新格式。
  • 方便快捷:不需要逐个修改模板文件。

缺点:

  • 不够灵活:如果你希望某个页面的时间格式和其他页面不一样,这种方法就无法满足需求,你还是需要使用带 function 的标签进行单独设置。

常见问题与解决

Q1: 为什么我直接写 [field:pubdate/] 显示的是一串数字? A1: 因为 Dedecms 默认存储的时间是 Unix 时间戳(1698384600)。[field:pubdate/] 单独使用时,系统会尝试用后台“核心设置”里的格式来转换它,如果后台没有设置或者设置错误,就可能显示原始时间戳。最稳妥的方法就是使用 strftime 函数进行格式化,如 [field:pubdate function='strftime("%Y-%m-%d",@me)'/]

Q2: 我想显示“刚刚”、“5分钟前”、“昨天”这样的相对时间怎么办? A2: Dedecms 默认不直接支持,但可以通过自定义函数或修改 /include/extend.func.php 文件来实现。

方法:在 /include/extend.func.php 文件末尾添加以下函数:

/**
 * 将时间戳转换为相对时间字符串(如:刚刚, 5分钟前, 昨天)
 * @param string $time 时间戳
 * @return string
 */
function formatTime($time) {
    $timer = time() - $time;
    $second = $timer;
    $minute = floor($timer / 60);
    $hour = floor($timer / 3600);
    $day = floor($timer / 86400);
    $week = floor($timer / 604800);
    $month = floor($timer / 2592000);
    $year = floor($timer / 31536000);
    if ($second < 60) return $second . "秒前";
    elseif ($minute < 60) return $minute . "分钟前";
    elseif ($hour < 24) return $hour . "小时前";
    elseif ($day == 0) return "昨天 " . date('H:i', $time);
    elseif ($day < 7) return $day . "天前";
    elseif ($week < 4) return $week . "周前";
    elseif ($month < 12) return $month . "个月前";
    else return $year . "年前";
}

然后在模板文件中使用这个新函数:

[field:pubdate function='formatTime(@me)'/]

这样,文章发布时间就会智能地显示为“刚刚”、“5分钟前”、“昨天”等更人性化的格式。

需求场景 推荐标签代码 说明
常用时间格式 [field:pubdate function='strftime("%Y-%m-%d",@me)'/] 灵活,可自定义格式,推荐使用。
显示更新时间 [field:senddate function='strftime("%Y-%m-%d",@me)'/] 调用文章的修改时间字段。
列表页调用 {dede:arclist}...[field:pubdate function='...'/]...{/dede:arclist} 在循环列表中使用。
全局统一格式 后台:系统 -> 系统基本参数 -> 核心设置 修改“时间格式化”,一劳永逸。
显示相对时间 先在 extend.func.php 添加函数,再用 [field:pubdate function='formatTime(@me)'/] 显示“刚刚”、“几分钟前”等。

希望这份详细的解析能帮助你完全掌握 Dedecms 的发布时间标签!

-- 展开阅读全文 --
头像
织梦远程服务器同步
« 上一篇 今天
C语言如何求解一元一次方程?
下一篇 » 今天

相关文章

取消
微信二维码
支付宝二维码

目录[+]