在网站内容运营中,文章的发布时间是一个看似简单却至关重要的细节。它不仅影响着用户对内容时效性的判断,也是搜索引擎评估内容新鲜度、进行排名的一个重要参考因素。对于AnQiCMS的用户来说,灵活地在模板中展示和自定义文章的发布时间,是提升网站用户体验和SEO表现的基础操作。

AnQiCMS作为一款高效、可定制的内容管理系统,提供了非常友好的模板引擎,让您可以轻松地控制内容的展示方式。显示文章的发布时间并自定义其格式,正是利用其模板标签和过滤器来实现的。

获取文章发布时间:基础字段 CreatedTimeUpdatedTime

首先,我们需要了解文章的发布时间在AnQiCMS中是如何存储的。在AnQiCMS的文档模型中,每篇文章都内置了CreatedTime(创建时间)和UpdatedTime(更新时间)这两个字段。当您在后台发布或编辑文章时,这些时间会被自动记录。

在AnQiCMS的模板中,无论是通过archiveList标签循环展示文章列表,还是在文章详情页使用archiveDetail标签获取单篇文章信息,您都可以访问到这些时间字段。例如,当您在一个文章循环中,item代表当前文章对象,那么其发布时间就是item.CreatedTime;在文章详情页,如果archive代表当前文章对象,其发布时间就是archive.CreatedTime

直接在模板中输出{{archive.CreatedTime}}{{item.CreatedTime}}时,您会发现它显示的是一串数字,这就是所谓的时间戳。时间戳通常是从某个固定时间点(如1970年1月1日0时0分0秒)到当前时间所经过的秒数。虽然机器可以理解这种格式,但对于访客来说,它并不直观。因此,我们需要将其转换为易于阅读的日期和时间格式。

自定义时间格式:stampToDate 标签的魔法

AnQiCMS为此提供了一个非常实用的模板标签——stampToDate。这个标签的“魔法”在于,它能将原始的时间戳轻松转换成您想要的任何日期和时间格式。

stampToDate标签的使用方法非常直观:{{stampToDate(时间戳, "格式")}}。这里的“时间戳”就是我们前面提到的archive.CreatedTimeitem.CreatedTime等字段值。而“格式”参数,则是其核心秘密所在,它遵循Go语言(AnQiCMS的开发语言)的时间格式化规则。

Go语言的日期格式化规则与其他编程语言(如PHP或Python)有所不同。它不使用Y-m-d%Y-%m-%d这样的占位符,而是以一个特定的参考日期和时间作为模板:2006-01-02 15:04:05。您需要将这个参考日期中的各个数字替换成您希望在最终输出中看到的对应日期时间部分的格式。

例如:

  • 想要显示完整的年份(2006),就使用2006
  • 想要显示两位数的月份(01),就使用01
  • 想要显示两位数的日期(02),就使用02
  • 想要显示24小时制的小时(15),就使用15
  • 想要显示分钟(04),就使用04
  • 想要显示秒(05),就使用05

通过这个参考模板,您可以灵活组合出各种格式:

  • 仅显示日期(年-月-日): {{stampToDate(archive.CreatedTime, "2006-01-02")}}
  • 显示中文日期: {{stampToDate(archive.CreatedTime, "2006年01月02日")}}
  • 显示日期和时间: {{stampToDate(archive.CreatedTime, "2006-01-02 15:04")}}
  • 仅显示时间: {{stampToDate(archive.CreatedTime, "15:04")}}
  • 显示英文月份简写: {{stampToDate(archive.CreatedTime, "Jan 02, 2006")}}
  • 显示星期几: {{stampToDate(archive.CreatedTime, "Mon Jan 02 2006")}}

在模板中实践:显示发布时间

接下来,让我们看看如何在实际的模板中应用stampToDate标签。

1. 在文章详情页显示发布时间

在文章详情页(例如archive/detail.html或自定义的文章模板),通常您会直接访问当前文章对象archive。您可以这样展示发布时间:

<article>
    <h1>{{ archive.Title }}</h1>
    <p>
        发布于:{{ stampToDate(archive.CreatedTime, "2006年01月02日 15:04") }}
        {%- if archive.UpdatedTime and archive.UpdatedTime > archive.CreatedTime %}
        (更新于:{{ stampToDate(archive.UpdatedTime, "2006年01月02日 15:04") }})
        {%- endif %}
    </p>
    <div>
        {{ archive.Content|safe }}
    </div>
</article>

上面的代码片段中,我们首先显示了文章的CreatedTime。接着,我们添加了一个条件判断:如果UpdatedTime存在且晚于CreatedTime,则显示“更新于”时间,让访客了解内容的最新状态。这里|safe过滤器用于确保文章内容中的HTML标签能被正确解析显示。

2. 在文章列表页显示发布时间

在文章列表页(例如article/list.html或自定义的分类列表模板),您通常会使用archiveList标签循环遍历多篇文章。在循环体内部,item变量代表每一篇文章。

<ul class="article-list">
    {% archiveList archives with type="page" limit="10" %}
        {% for item in archives %}
        <li>
            <h2><a href="{{ item.Link }}">{{ item.Title }}</a></h2>
            <p class="meta">
                发布日期:{{ stampToDate(item.CreatedTime, "2006-01-02") }}
                <span>浏览量:{{ item.Views }}</span>
            </p>
            <p>{{ item.Description }}</p>
            <a href="{{ item.Link }}" class="read-more">阅读更多</a>
        </li>
        {% empty %}
        <li>目前还没有文章发布。</li>
        {% endfor %}
    {% endarchiveList %}
</ul>

在这个例子中,每篇文章的发布时间都以简洁的“年-月-日”格式显示在标题下方,帮助用户快速浏览。

更多自定义格式与实用技巧

掌握stampToDate标签和Go语言的时间格式化规则,您就拥有了无限的自定义能力。您可以尝试:

  • 国际化日期格式: 如果您的网站面向全球用户