在运营网站内容时,文章的发布时间是一个不可或缺的元素。它不仅能帮助访问者快速了解内容的“新鲜度”,对搜索引擎优化(SEO)也有着积极的影响,因为它传递了网站内容持续更新的信号。安企CMS(AnQiCMS)在内容管理方面提供了极大的灵活性,无论是获取还是自定义显示文章的发布时间,都非常便捷。

接下来,我们将一起探索如何在安企CMS中,灵活地显示文章的发布时间,并按照我们的需求定制日期时间的显示格式。

获取文章的发布时间

在安企CMS中,每篇文章都伴随着两个重要的时间戳:CreatedTime(创建时间)和UpdatedTime(更新时间)。这两个字段储存的是文章在系统中的创建或最后修改时刻,它们以时间戳的形式存在,这意味着它们是一串数字,例如 1609470335

要在文章详情页或文章列表中显示这些时间,我们需要在模板文件(通常是 archive/detail.htmlarchive/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">阅读全文 &gt;&gt;</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)在