在运营博客时,我们常常希望文章的发布时间能以更直观、更符合品牌风格的方式呈现。例如,在日期前面加上“发布于:”字样,能让读者一眼明了这是一篇已发布的文章。安企CMS(AnQiCMS)以其灵活的模板引擎,让这样的定制化需求变得非常简单。今天,我们就来探讨如何巧妙地利用AnQiCMS内置的add过滤器,在博客文章的发布时间前动态添加“发布于:”字样。
核心工具解析:了解add过滤器和stampToDate标签
要实现这个功能,我们需要用到AnQiCMS模板引擎中的两个关键特性:archiveDetail标签、stampToDate标签和add过滤器。
archiveDetail标签 在文章详情页,archiveDetail标签是获取文章所有详细信息的入口。通过它,我们可以轻松地获取到文章的发布时间字段,通常是archive.CreatedTime。这个CreatedTime通常以时间戳的形式存储。stampToDate标签 由于archive.CreatedTime是一个时间戳,我们需要将其转换为我们习惯阅读的日期和时间格式。stampToDate标签正是为此而生。它能够将Unix时间戳按照您指定的Go语言时间格式字符串进行格式化。例如,{{stampToDate(archive.CreatedTime, "2006年01月02日 15:04")}}就会将时间戳格式化为“2023年02月09日 10:30”这样的形式。add过滤器add过滤器是本次操作的主角。它的作用非常直接——将两个值相加。这里的“相加”不仅仅指数字的加法,更重要的是它支持字符串的拼接。这意味着,我们可以用它来将“发布于:”这个字符串和格式化后的日期字符串连接起来。它的使用方式是{{ obj|add:obj2 }}。例如,{{ "你好"|add:"世界" }}会显示“你好世界”。
实战演练:逐步实现定制显示
现在,我们来一步步地将这些工具应用到您的博客文章详情页上。
第一步:定位您的模板文件
通常,博客文章详情页的模板文件位于您当前主题目录下的archive/detail.html。您可以通过AnQiCMS后台的“模板设计”->“模板管理”功能在线编辑,也可以通过FTP或其他文件管理工具找到并编辑该文件。
第二步:找到文章发布时间的代码
打开archive/detail.html文件,寻找显示文章发布日期的代码段。它可能看起来像这样:
<span>{{stampToDate(archive.CreatedTime, "2006年01月02日 15:04")}}</span>
或者更简单地:
<span>{{archive.CreatedTime}}</span>
第三步:组合使用stampToDate和add过滤器
一旦找到了现有的日期显示代码,我们就可以开始改造它了。
首先,确保您的CreatedTime已经被stampToDate格式化成易读的字符串。如果还没有,请先将其包裹起来:
{% set formattedTime = stampToDate(archive.CreatedTime, "2006年01月02日 15:04") %}
这里我们使用set标签将格式化后的时间赋值给一个临时变量formattedTime,这样代码会更清晰。
接下来,我们将“发布于:”这个字符串与formattedTime变量通过add过滤器拼接起来:
{{ "发布于:"|add:formattedTime }}
第四步:将修改后的代码应用到模板
将上述代码替换掉您在第二步中找到的原有日期显示代码。完整的代码段可能如下所示:
修改前示例:
<article>
<h1>{% archiveDetail with name="Title" %}</h1>
<div>
<a href="{% categoryDetail with name='Link' %}">{% categoryDetail with name='Title' %}</a>
<span>{% archiveDetail with name="CreatedTime" format="2006年01月02日" %}</span> {# 或者直接是 {{archive.CreatedTime}} #}
<span>{% archiveDetail with name="Views" %}°</span>
</div>
{# ... 文章内容及其他部分 ... #}
</article>
修改后示例:
<article>
<h1>{% archiveDetail with name="Title" %}</h1>
<div>
<a href="{% categoryDetail with name='Link' %}">{% categoryDetail with name='Title' %}</a>
{# 在这里插入我们组合好的发布时间 #}
<span>
{%- set formattedTime = stampToDate(archive.CreatedTime, "2006年01月02日 15:04") -%}
{{ "发布于:"|add:formattedTime }}
</span>
<span>{% archiveDetail with name="Views" %}°</span>
</div>
{# ... 文章内容及其他部分 ... #}
</article>
请注意{%- set ... -%}两边的短横线,它们的作用是移除标签自身可能产生的空白行,让最终输出的HTML更加整洁。
保存您修改的模板文件。
第五步:清除系统缓存
为了确保您的修改立即生效,请登录AnQiCMS后台,点击左侧菜单底部的“更新缓存”按钮,清除所有系统缓存。之后,刷新您的博客文章详情页,您应该就能看到发布时间前面已经动态添加了“发布于:”字样。
温馨提示
- 备份是好习惯: 在对任何模板文件进行修改之前,请务必备份原始文件,以防万一出现问题可以迅速恢复。
- 适用于所有时间字段:
add过滤器和stampToDate标签不仅适用于文章发布时间CreatedTime,您也可以将其应用于文章更新时间UpdatedTime或其他任何时间戳字段。 - 格式化字符串的灵活性:
stampToDate标签中的时间格式字符串是基于Go语言的格式化标准,非常灵活。您可以根据需要调整,例如只显示年、月、日,或加上星期等。
通过上述步骤,您已经成功地利用AnQiCMS的模板特性,为您的博客文章发布时间添加了自定义的前缀。这不仅提升了网站的个性化程度,也为读者带来了更清晰、更友好的阅读体验。
常见问题解答 (FAQ)
Q1: 这个“发布于:”前缀只会出现在文章详情页吗?如果我想在文章列表页也显示怎么办?
A1: 是的,我们这里演示的修改是针对文章详情页的模板(通常是archive/detail.html)。如果您想在文章列表页(例如archive/list.html或首页index.html)也显示带有“发布于:”的文章时间,您需要找到这些模板文件中循环显示文章列表(通常使用archiveList标签)的部分,然后在其中对应的日期显示位置,按照本文提供的方法进行相同的修改。
Q2: 除了“发布于:”,我还可以添加其他文字或者HTML标签吗?
A2: 当然可以。add过滤器能够拼接任何字符串,包括带有HTML标签的字符串。例如,如果您想将发布时间用一个<em>标签包裹,并在前面加上“发布于:”字样,您可以这样组合:
{{ "发布于:<em>"|add:formattedTime|add:"</em>" }}。请注意,如果拼接后的内容包含HTML标签,您可能需要在最外层使用|safe过滤器(例如{{ "发布于:<em>"|add:formattedTime|add:"</em>"|safe }}),以确保浏览器能正确解析HTML而不是将其显示为纯文本。
Q3: 如果我修改了模板文件并清除了缓存,但页面上没有看到变化,可能是什么原因? A3: 遇到这种情况,您可以从以下几个方面排查:
- 语法错误: 请仔细检查您修改的代码是否存在拼写错误、标签未闭合等语法问题。AnQiCMS的Go模板引擎对语法要求严格,任何小错误都可能导致模板解析失败。
- **模板