dede发布时间标签如何调用与自定义?

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

这个标签是网站开发中最常用、最核心的标签之一,用于在文章列表页、文章内容页等地方显示文章的发布时间。

dede 发布时间标签
(图片来源网络,侵删)

核心标签:field:pubdate

这是获取文章发布时间最根本、最常用的标签,它直接从文章的数据表中调用 pubdate 字段(Unix 时间戳格式)。


基础用法

在 DedeCMS 的模板文件(通常是 .htm 文件)中,使用 {dede:field.pubdate /} 来调用当前文章的发布时间。

示例:

发布时间:{dede:field.pubdate /}

默认情况下,这个标签会直接输出一个 Unix 时间戳,1712345678,这显然不是我们想要的,通常会配合格式化函数一起使用。

dede 发布时间标签
(图片来源网络,侵删)

常用格式化函数(重点)

为了将时间戳显示为人类可读的格式,我们需要使用 DedeCMS 的内置函数 MyDate()

MyDate() 函数语法

MyDate(格式, 时间戳)

  • 格式: 定义你希望显示的时间样式,使用类似 PHP date() 函数的格式化字符。
    • %Y: 四位年份 (e.g., 2025)
    • %m: 两位月份 (e.g., 05)
    • %d: 两位日期 (e.g., 20)
    • %H: 24小时制小时 (e.g., 14)
    • %i: 分钟 (e.g., 30)
    • %s: 秒
    • 更多格式字符可以参考 PHP 官方文档。
  • 时间戳: 通常就是 field:pubdate

常见的时间格式示例

只显示年月日,如 2025-05-20

{dede:field.pubdate function='MyDate("%Y-%m-%d", @me)'/}

或者使用简写形式(更推荐):

dede 发布时间标签
(图片来源网络,侵删)
[field:pubdate function='MyDate("%Y-%m-%d", @me)'/]

输出: 2025-05-20

只显示年月日,如 2025年05月20日

[field:pubdate function='MyDate("%Y年%m月%d日", @me)'/]

输出: 2025年05月20日

显示年月日时分,如 2025-05-20 14:30

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

输出: 2025-05-20 14:30

显示“年-月-日 时:分:秒”,如 2025-05-20 14:30:45

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

输出: 2025-05-20 14:30:45


在不同场景下的使用

a) 在文章列表页(list_article.htm

在列表页,你需要在一个循环中调用每篇文章的时间,这个循环由 {dede:list} 标签完成。

{dede:list pagesize='10'}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
        <span class="time">[field:pubdate function='MyDate("%Y-%m-%d", @me)'/]</span>
    </li>
{/dede:list}

b) 在文章内容页(article_article.htm

页,直接调用即可,因为此时上下文就是当前这篇文章。

<div class="article-info">
    <span>发布时间:[field:pubdate function='MyDate("%Y-%m-%d %H:%i", @me)'/]</span>
    <span>作者:[field:writer/]</span>
    <span>来源:[field:source/]</span>
    <span>点击:[field:click/]</span>
</div>

c) 在自定义列表循环中(如栏目页、推荐位等)

{dede:arclist}{dede:loop} 等循环标签中,使用方式与列表页完全相同。

{dede:arclist typeid='1' titlelen='30' row='5'}
    <h3><a href="[field:arcurl/]">[field:title/]</a></h3>
    <p class="post-meta">[field:pubdate function='MyDate("Y-m-d", @me)'/]</p>
{/dede:arclist}

注意:MyDate 函数中,%YY 都可以表示四位年份,%mm 都可以表示两位月份,通常在不严格要求补零的情况下,使用 Y-m-d 更简洁。


高级用法:自定义时间格式(如“X天前”)

对于一些动态网站,我们希望显示“刚刚”、“5分钟前”、“3天前”这样的相对时间,而不是固定的日期格式,这需要通过修改 PHP 文件或使用自定义函数来实现。

方法:修改 include/extend.func.php 文件

  1. 打开文件:用 FTP 或其他工具登录你的网站,找到并打开 /include/extend.func.php 文件。
  2. 添加函数:在文件末尾添加以下 PHP 函数:
/**
 * 将时间戳转换为“X天前”或“X小时前”等相对时间格式
 * @param int $ptime 时间戳
 * @return string
 */
function formatTime($ptime) {
    $ptime = strtotime($ptime);
    $etime = time() - $ptime;
    if ($etime < 1) return '刚刚';
    $interval = array (
        12 * 30 * 24 * 60 * 60  => '年前 (%s)',
        30 * 24 * 60 * 60       => '个月前 (%s)',
        7 * 24 * 60 * 60        => '周前 (%s)',
        24 * 60 * 60            => '天前 (%s)',
        60 * 60                 => '小时前 (%s)',
        60                      => '分钟前 (%s)',
        1                       => '秒前 (%s)'
    );
    foreach ($interval as $secs => $format) {
        $key = (int)($etime / $secs);
        if ($key >= 1) {
            return sprintf($format, $key);
        }
    }
}
  1. 在模板中调用: 在你的模板文件中,使用 field:pubdate 调用这个新函数。
[field:pubdate function='formatTime(@me)'/]

效果:

  • 如果文章是 10 分钟前发布的,会显示 10分钟前
  • 如果文章是 3 天前发布的,会显示 3天前
  • 如果文章是 1 年前发布的,会显示 1年前

总结表格

用途 标签代码 说明
基础调用 {dede:field.pubdate /} 输出 Unix 时间戳,基本不用。
标准日期 [field:pubdate function='MyDate("%Y-%m-%d", @me)'/] 最常用,格式如 2025-05-20
中文日期 [field:pubdate function='MyDate("%Y年%m月%d日", @me)'/] 格式如 2025年05月20日
带时间 [field:pubdate function='MyDate("%Y-%m-%d %H:%i", @me)'/] 格式如 2025-05-20 14:30
相对时间 [field:pubdate function='formatTime(@me)'/] 需要先在 extend.func.php 中添加 formatTime 函数,显示如 3天前

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

-- 展开阅读全文 --
头像
char在C语言中具体指什么?
« 上一篇 今天
如何获取C语言程序设计电子版资源?
下一篇 » 今天

相关文章

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

目录[+]