在安企CMS中管理内容,发布时间无疑是每篇文章不可或缺的重要元信息。它不仅能让读者了解内容的时效性,对网站的SEO也有着积极的影响。好在安企CMS为我们提供了非常便捷和灵活的方式,来在文章详情页中动态显示并格式化这些发布时间。

获取文章的发布时间

在安企CMS的文章详情页面,系统会自动将当前文章的所有信息作为上下文变量提供给我们。其中,文章的发布时间存储在 CreatedTime 字段中。这个字段以时间戳的形式保存,代表了文章首次发布的具体时刻。

如果您想直接在模板中获取这个时间戳,可以简单地通过 {{ archive.CreatedTime }} 来实现。这里的 archive 通常就是文章详情页中代表当前文章的对象。

格式化发布时间:`stampToDate` 标签的妙用

仅仅显示一个长串的时间戳,显然不是我们希望的效果。我们需要将其转换为人类可读的日期和时间格式。安企CMS为此提供了一个非常实用的内置标签:stampToDate

stampToDate 标签的设计非常直观,它接受两个参数:第一个是要格式化的时间戳,第二个是您期望的日期时间格式字符串。

这里的格式字符串有些特别,它不是我们常见的 YYYY-MM-DD 这种形式,而是Go语言特有的,基于 2006-01-02 15:04:05 这个参考时间点进行定义的。您只需将这个参考时间点中的不同部分替换成您想要显示的实际日期或时间即可。

让我们看一些常见的格式化示例:

  • 只显示年份、月份和日期: {{ stampToDate(archive.CreatedTime, "2006-01-02") }}
    • 例如:2023-10-26
  • 显示中文的年月日: {{ stampToDate(archive.CreatedTime, "2006年01月02日") }}
    • 例如:2023年10月26日
  • 显示时分秒: {{ stampToDate(archive.CreatedTime, "15:04:05") }}
    • 例如:14:30:00
  • 显示完整的日期和时间: {{ stampToDate(archive.CreatedTime, "2006-01-02 15:04:05") }}
    • 例如:2023-10-26 14:30:00
  • 显示星期几和日期: {{ stampToDate(archive.CreatedTime, "Mon, 02 Jan 2006") }}
    • 例如:Thu, 26 Oct 2023

您可以看到,通过灵活组合 2006-01-02 15:04:05 中的数字和文字,我们可以定义出几乎任何我们想要的日期时间格式。

在文章详情页中整合显示发布时间

通常,我们会在文章详情页的模板文件(例如 detail.html)中进行这些操作。找到您希望显示发布时间的位置,然后插入相应的 stampToDate 标签。

一个典型的文章详情页可能包含标题、元信息(如发布时间、分类、浏览量)和文章内容。我们可以这样来组织:

<article class="article-detail">
    <h1 class="article-title">{{ archive.Title }}</h1>
    <div class="article-meta">
        <span class="publish-time">发布于:{{ stampToDate(archive.CreatedTime, "2006年01月02日 15:04") }}</span>
        <span class="category">分类:<a href="{% categoryDetail with name='Link' id=archive.CategoryId %}">{% categoryDetail with name='Title' id=archive.CategoryId %}</a></span>
        <span class="views">浏览:{{ archive.Views }}次</span>
        {# 如果需要显示更新时间,可以使用 UpdatedTime 字段 #}
        {# <span class="update-time">更新于:{{ stampToDate(archive.UpdatedTime, "2006-01-02") }}</span> #}
    </div>
    <div class="article-content">
        {{ archive.Content|safe }}
    </div>
</article>

在这段代码中:

  • 我们直接通过 {{ archive.Title }} 获取文章标题。
  • 使用 stampToDate(archive.CreatedTime, "2006年01月02日 15:04") 将文章的发布时间戳格式化为“年-月-日 时:分”的形式。
  • archive.Content|safe 用于安全地显示文章内容,防止HTML代码被转义。

通过这样的设置,您的文章详情页就能动态、美观地展示发布时间了。

一些实用的考量

  • CreatedTimeUpdatedTime CreatedTime 记录的是文章首次发布的日期时间。如果文章经过多次修改,您可能还会对显示 UpdatedTime 字段感兴趣,它表示文章最后一次更新的时间。您可以根据网站的需求选择显示其中一个或两者。
  • 默认格式: 如果您在使用 archiveDetail 标签获取 CreatedTimeUpdatedTime 时,没有额外指定 format 参数,那么它在默认情况下会自动被格式化为 2006-01-02 的形式。
  • 模板文件位置: 文章详情页的模板通常位于您当前使用模板包的 archive/detail.html{模型table}/detail.html 路径下,具体名称和结构可能根据您的模板设计有所不同。

安企CMS的这种灵活机制,让我们可以轻松地对内容展示进行深度定制,确保网站的每一个细节都符合我们的运营需求。


常见问题 (FAQ)

  1. 问:为什么在格式化时间时要使用 2006-01-02 15:04:05 这样的特殊数字组合?它代表什么? 答:这是Go语言特有的时间格式化约定。Go语言不使用 YYYY-MM-DD 这种符号,而是使用一个固定的参考时间 2006-01-02 15:04:05.999999999 -0700 MST 来作为格式化模板。您只需要将这个参考时间点中对应年月日时分秒的部分替换成您想要的显示格式(例如,想显示两位数的月份就写 01,想显示完整年份就写 2006),系统就会按照您的替换规则进行格式化。

  2. 问:我只想显示文章的更新时间,应该使用哪个字段? 答:文章的更新时间由 archive.UpdatedTime 字段表示。它的使用方法和 CreatedTime 完全相同,同样需要搭配 stampToDate 标签进行格式化,例如:{{ stampToDate(archive.UpdatedTime, "2006年01月02日") }}

  3. 问:如果我在 stampToDate 标签中不指定格式字符串,会怎样? 答:在 archiveDetail 标签中直接获取 CreatedTimeUpdatedTime 且不指定 format 参数时,它在默认用法下会被格式化为 `2006-0