在运营网站内容时,文章的发布时间是一个不可或缺的元素。它不仅能帮助访问者快速了解内容的“新鲜度”,对搜索引擎优化(SEO)也有着积极的影响,因为它传递了网站内容持续更新的信号。安企CMS(AnQiCMS)在内容管理方面提供了极大的灵活性,无论是获取还是自定义显示文章的发布时间,都非常便捷。
接下来,我们将一起探索如何在安企CMS中,灵活地显示文章的发布时间,并按照我们的需求定制日期时间的显示格式。
获取文章的发布时间
在安企CMS中,每篇文章都伴随着两个重要的时间戳:CreatedTime(创建时间)和UpdatedTime(更新时间)。这两个字段储存的是文章在系统中的创建或最后修改时刻,它们以时间戳的形式存在,这意味着它们是一串数字,例如 1609470335。
要在文章详情页或文章列表中显示这些时间,我们需要在模板文件(通常是 archive/detail.html 或 archive/list.html)中使用安企CMS提供的模板标签。
当我们想在一个文章详情页展示发布时间时,可以使用 archiveDetail 标签来获取当前文章的 CreatedTime:
<div>发布时间:{{archive.CreatedTime}}</div>
或者使用 archiveDetail 标签的具名方式:
<div>发布时间:{% archiveDetail with name="CreatedTime" %}</div>
如果您在文章列表页(例如使用 archiveList 标签循环展示文章)中,获取每篇文章的发布时间也非常直接:
{% archiveList archives with type="list" limit="10" %}
{% for item in archives %}
<div>文章标题:{{item.Title}}</div>
<div>发布时间:{{item.CreatedTime}}</div>
{% endfor %}
{% endarchiveList %}
您会发现,直接这样输出 CreatedTime(或 UpdatedTime)会得到一串数字,而不是我们熟悉的日期时间格式。这是因为它们是UNIX时间戳,需要进一步的格式化才能以人类可读的方式呈现。
自定义日期时间格式
为了将时间戳转换成易于阅读的日期时间格式,安企CMS提供了一个非常实用的模板标签:stampToDate。这个标签允许我们根据Go语言的特定格式规则,将时间戳格式化为我们想要的任何日期时间字符串。
stampToDate 标签的使用方法是 {{stampToDate(时间戳, "格式")}}。这里的“格式”是一个字符串,它不是我们通常理解的 YYYY-MM-DD 这样的占位符,而是Go语言特有的“参照时间”格式。Go语言使用一个固定的时间 2006-01-02 15:04:05 作为格式化的参照模板。这意味着:
2006代表年份01代表月份02代表日期15代表小时(24小时制)04代表分钟05代表秒
理解了这个参照规则,我们就可以灵活地组合出各种日期时间格式了。
以下是一些常见的格式化示例:
仅显示日期(年-月-日): 如果您只想显示文章的发布日期,可以使用
2006-01-02作为格式字符串。<div>发布日期:{{stampToDate(archive.CreatedTime, "2006-01-02")}}</div> <!-- 输出示例:2023-10-26 -->显示日期和时间(精确到分钟): 如果需要精确到分钟,可以在日期后添加小时和分钟的参照值。
<div>发布时间:{{stampToDate(archive.CreatedTime, "2006-01-02 15:04")}}</div> <!-- 输出示例:2023-10-26 10:30 -->显示完整日期和时间(精确到秒): 包含年月日时分秒的完整格式。
<div>完整时间:{{stampToDate(archive.CreatedTime, "2006-01-02 15:04:05")}}</div> <!-- 输出示例:2023-10-26 10:30:45 -->中文化日期显示: 您甚至可以结合中文显示日期,比如“2023年10月26日”。
<div>中文日期:{{stampToDate(archive.CreatedTime, "2006年01月02日")}}</div> <!-- 输出示例:2023年10月26日 -->其他自定义组合: 例如,只显示月份和日期,或者只显示小时和分钟。
<div>月日:{{stampToDate(archive.CreatedTime, "01-02")}}</div> <!-- 输出示例:10-26 --> <div>时分:{{stampToDate(archive.CreatedTime, "15:04")}}</div> <!-- 输出示例:10:30 -->
综合应用示例
现在,我们将这些知识运用到实际的模板代码中,以文章详情页和文章列表页为例。
文章详情页 (archive/detail.html) 示例:
<article>
<h1>{% archiveDetail with name="Title" %}</h1>
<div class="article-meta">
<span>分类:<a href="{% categoryDetail with name='Link' %}">{% categoryDetail with name='Title' %}</a></span>
<span>发布于:{{stampToDate(archive.CreatedTime, "2006年01月02日 15:04")}}</span>
<span>阅读量:{% archiveDetail with name="Views" %}</span>
<!-- 如果文章有更新时间,可以这样显示 -->
{% if archive.UpdatedTime and archive.UpdatedTime != archive.CreatedTime %}
<span>更新于:{{stampToDate(archive.UpdatedTime, "2006年01月02日 15:04")}}</span>
{% endif %}
</div>
<div class="article-content">
{%- archiveDetail articleContent with name="Content" %}
{{articleContent|safe}}
</div>
</article>
文章列表页 (archive/list.html) 示例:
<div class="article-list">
{% archiveList archives with type="page" limit="10" %}
{% for item in archives %}
<div class="article-item">
<h3><a href="{{item.Link}}">{{item.Title}}</a></h3>
<div class="item-meta">
<span>分类:{% categoryDetail with name="Title" id=item.CategoryId %}</span>
<span>发布于:{{stampToDate(item.CreatedTime, "2006-01-02")}}</span>
<span>浏览量:{{item.Views}}</span>
</div>
<p>{{item.Description}}</p>
<a href="{{item.Link}}" class="read-more">阅读全文 >></a>
</div>
{% empty %}
<p>暂时没有文章发布。</p>
{% endfor %}
{% endarchiveList %}
<div class="pagination-area">
{% pagination pages with show="5" %}
<!-- 分页链接,具体样式可根据需求调整 -->
{% if pages.PrevPage %}<a href="{{pages.PrevPage.Link}}">上一页</a>{% endif %}
{% for item in pages.Pages %}<a class="{% if item.IsCurrent %}active{% endif %}" href="{{item.Link}}">{{item.Name}}</a>{% endfor %}
{% if pages.NextPage %}<a href="{{pages.NextPage.Link}}">下一页</a>{% endif %}
{% endpagination %}
</div>
</div>
通过以上方法,您就可以轻松地在安企CMS网站的各个位置,按照您希望的格式显示文章的发布时间了。这种灵活性使得内容的呈现更加专业和符合用户习惯。
常见问题 (FAQ)
1. 为什么直接输出 {{archive.CreatedTime}} 得到的是一串数字,而不是日期格式?
这是因为 CreatedTime(和 UpdatedTime)在