在网站运营中,我们经常需要动态地显示当前年份或时间,例如在网站底部显示最新的版权年份,或者在文章中精确标记页面的生成时间。AnqiCMS 提供了灵活强大的模板功能,让这些操作变得非常简单。接下来,我们将探讨如何在 AnqiCMS 模板中实现这一需求。
动态显示当前年份或时间:使用 now 标签
AnqiCMS 提供了一个非常便捷的内置标签 now,用于在模板渲染时,动态获取并显示当前的日期或时间。这个标签的关键在于其时间格式化字符串,它遵循 Go 语言独特的日期时间格式表示方法,而不是我们常用于 PHP 或 JavaScript 中的 Y-m-d H:i:s 这类格式。
在 Go 语言中,格式化字符串实际上是一个具体的参考时间:2006年01月02日 15时04分05秒。您需要将您想要显示的时间元素的“布局”与这个参考时间的对应部分进行匹配。
以下是一些常用的 now 标签示例及其输出:
仅显示当前年份: 如果您想在网站页脚显示版权年份,可以直接使用:
© {% now "2006" %} 版权所有。这会在页面上显示为:
© 2023 版权所有。(假设当前年份是 2023)显示完整日期: 如果需要在页面上展示当前的完整日期,例如
年-月-日格式:今天是:{% now "2006-01-02" %}页面显示可能为:
今天是:2023-10-26显示完整日期和时间: 如果需要包含精确到秒的时间:
页面加载于:{% now "2006-01-02 15:04:05" %}页面显示可能为:
页面加载于:2023-10-26 10:30:45自定义格式显示: 您可以根据需要自由组合,例如显示“年/月/日 星期几 小时:分钟”:
更新时间:{% now "2006/01/02 Mon 15:04" %}页面显示可能为:
更新时间:2023/10/26 Thu 10:30
此外,now 标签还有一个可选参数 fake,用于在开发和调试时强制显示一个固定的参考时间,方便样式调试或数据展示,例如:
测试时间:{% now "2006-01-02 15:04:05" fake %}
这会显示 Go 语言的参考时间本身,而不是当前系统时间。
格式化已有的时间戳:使用 stampToDate 函数
除了显示当前时间,我们常常还需要显示文章发布时间、更新时间等信息。这些时间通常以时间戳(Unix timestamp)的形式存储在数据库中。AnqiCMS 提供了 stampToDate 函数来帮助我们将这些时间戳格式化为可读的日期或时间。
这个函数接受两个参数:一个 10 位的时间戳(例如从 archive.CreatedTime 或 item.UpdatedTime 获取),以及一个与 now 标签相同的 Go 语言格式化字符串。
以下是一些 stampToDate 函数的常用示例:
格式化文章创建日期: 在文章详情页或列表页中,您可以这样显示文章的发布日期:
发布于:{{ stampToDate(archive.CreatedTime, "2006年01月02日") }}页面显示可能为:
发布于:2023年09月15日格式化文章更新日期和时间: 如果需要展示精确的更新时间:
最后更新:{{ stampToDate(item.UpdatedTime, "2006-01-02 15:04") }}页面显示可能为:
最后更新:2023-10-25 18:00仅显示时间: 您可以仅提取时间部分进行显示:
具体时间:{{ stampToDate(archive.CreatedTime, "15:04") }}页面显示可能为:
具体时间:10:30
archive.CreatedTime 和 item.UpdatedTime 是 AnqiCMS 模板中常见的变量,它们分别代表当前文档(或列表中的某个条目)的创建时间和更新时间的时间戳。
实际应用场景
网站页脚版权信息: 最常见的用途之一,确保版权年份自动更新:
<footer> <p>© {% now "2006" %} All Rights Reserved. {{ system.SiteName }}</p> </footer>文章发布/更新元信息: 在文章标题下方或侧边栏显示关键时间信息:
<div class="article-meta"> <span>发布日期:{{ stampToDate(archive.CreatedTime, "2006年01月02日") }}</span> <span>更新日期:{{ stampToDate(archive.UpdatedTime, "2006-01-02 15:04") }}</span> </div>动态页面提示: 例如在某个列表页或工具页显示数据更新的实时性:
<p>数据最后更新于:{% now "2006-01-02 15:04" %}</p>
通过 now 标签和 stampToDate 函数,AnqiCMS 模板在处理日期和时间显示方面提供了强大的灵活性,无论是获取当前时间还是格式化已有的时间戳,都能够轻松应对,让您的网站内容保持时效性和专业性。
常见问题 (FAQ)
1. 为什么 AnqiCMS 模板中的日期格式化字符串是 2006-01-02 15:04:05 这种形式,而不是常见的 YYYY-MM-DD?
这是因为 AnqiCMS 的模板引擎基于 Go 语言,而 Go 语言的日期时间格式化功能使用一个固定的参考时间 2006-01-02 15:04:05.999999999 -0700 MST(即 2006 年 1 月 2 日 下午 3 点 4 分 5 秒)来定义布局。您需要将您想要显示的日期时间元素(如年、月、日、时、分、秒)与这个参考时间中的对应数字进行匹配,而不是像其他语言那样使用占位符。例如,要显示年份,您就写 2006,而不是 YYYY。
2. 我可以直接在 {{ ... }} 中使用 {% now "2006" %} 这样的语法吗?
不可以。在 AnqiCMS 模板中,{{ ... }} 用于输出变量的值,而 {% ... %} 用于执行控制逻辑或调用标签。now 是一个标签,所以必须使用 {% now ... %} 的语法来调用。如果您想将 now 标签的结果赋值给一个变量再输出,可以使用 {% set current_year = now "2006" %} 然后在 {{ current_year }} 中输出,但直接使用 {% now "2006" %} 通常更简洁。
3. 除了显示年份和完整的日期时间,我还能如何显示当前月份、星期几或其他特定时间元素?
您只需参照 Go 语言的格式化布局,找到对应的时间元素并将其放入您的格式化字符串中。例如: