在AnQiCMS的模板中,如何有效地展示变量数据,是每一位网站运营者和模板制作者都需要掌握的核心技能。AnQiCMS采用了一套类似于Django模板引擎的语法,使得数据的调用和展示既直观又灵活。本文将深入探讨在AnQiCMS模板中显示变量的各种方式,帮助您将后台配置的数据、文章内容等动态信息精准地呈现在网站前端。
核心概念:双花括号 {{ }} 与变量基础
在AnQiCMS的模板里,显示任何动态数据最基本的方式就是使用双花括号 {{ 变量名 }}。这是一种直观的语法,模板引擎在渲染页面时,会自动将双花括号内的变量替换为实际的数据。
例如,如果你想在模板中显示网站的名称,它可能被定义为一个变量 SiteName,你就可以这样调用:
<h1>{{ SiteName }}</h1>
如果变量是一个包含多个属性的对象(如一篇文章、一个分类),你可以使用点 . 来访问其内部属性。例如,一篇文档对象通常会有标题 Title 和内容 Content 等属性:
<h2>{{ archive.Title }}</h2>
<div>{{ archive.Content }}</div>
需要注意的是,AnQiCMS中的变量命名通常遵循驼峰命名法则,即每个单词的首字母大写(例如 SiteName, CreatedTime)。
动态获取数据:标签 (Tags) 的力量
除了直接访问一些全局变量外,AnQiCMS提供了丰富的“标签” ({% tag %}) 来动态地从数据库中获取数据。这些标签执行特定的逻辑,并将查询到的数据赋值给模板中的变量,供您进一步展示。
1. 获取全局或站点级信息:
AnQiCMS提供了一些标签用于获取整个网站或当前站点的配置信息,如 system、contact、tdk(TDK指Title、Description、Keywords)。这些标签通常通过 name 参数指定要获取的字段:
- 网站系统设置:
{% system with name="SiteName" %}会显示您在后台“全局设置”中配置的网站名称。同样,{% system with name="SiteLogo" %}会返回网站Logo的图片地址。 - 联系方式:
{% contact with name="Cellphone" %}将显示您在后台“联系方式设置”中填写的联系电话。 - 页面TDK:
{% tdk with name="Title" %}将获取当前页面的标题。当您需要将网站标题与网站名称结合时,可以使用{% tdk with name="Title" siteName=true %}。
2. 获取内容详情: 当您处于文章详情页、分类详情页或单页面时,可以直接使用对应的详情标签来获取当前内容的详细信息。这些标签会自动识别当前页面的上下文。
- 文档详情:
{% archiveDetail with name="Title" %}会显示当前文章的标题。同样,{% archiveDetail with name="Content" %}会显示文章内容。您也可以通过id或token参数获取指定文档的信息。 - 分类详情:
{% categoryDetail with name="Title" %}显示当前分类的名称,{% categoryDetail with name="Description" %}显示分类的描述。 - 单页详情:
{% pageDetail with name="Content" %}用于显示“关于我们”这类单页面的内容。
3. 获取内容列表:
对于需要展示多条数据(如文章列表、产品列表、分类导航)的场景,您需要使用列表标签,并结合 {% for %} 循环标签来遍历并显示每一项的数据。
- 文档列表:
{% archiveList archives with type="list" categoryId="1" limit="10" %}会获取指定分类下的10篇文章。在循环中,您可以通过{{ item.Title }}访问每篇文章的标题。 - 分类列表:
{% categoryList categories with moduleId="1" parentId="0" %}会获取文章模型下所有的顶级分类。您可以在循环中使用{{ item.Title }}和{{ item.Link }}来构建导航。
当您使用列表标签获取数据时,通常会像这样组织代码:
{% archiveList articles with type="list" limit="5" %}
{% for article in articles %}
<h3><a href="{{ article.Link }}">{{ article.Title }}</a></h3>
<p>{{ article.Description }}</p>
<span>发布时间:{{ stampToDate(article.CreatedTime, "2006-01-02") }}</span>
{% empty %}
<p>暂时没有文章。</p>
{% endfor %}
{% endarchiveList %}
这里的 articles 是您通过 archiveList 标签获取到的文章集合,article 是循环中每一篇文章的变量。
精细控制:使用过滤器 (Filters) 优化变量显示
仅仅获取原始数据往往不够,我们还需要对数据进行格式化、截取或者转换。AnQiCMS提供了“过滤器”机制,通过在变量名后添加竖线 | 和过滤器名称,您可以对变量的显示进行精细控制。
1. 处理HTML内容:|safe
当您在后台编辑器中输入了富文本(如文章内容),其中包含HTML标签时,如果直接输出 {{ archive.Content }},为了安全,模板引擎可能会将其中的HTML标签进行转义,显示为 <p>内容</p> 而不是渲染后的样式。这时,您需要使用 |safe 过滤器,告诉模板引擎这段内容是安全的,可以直接作为HTML输出:
<div>{{ archive.Content|safe }}</div>
2. 格式化日期和时间:stampToDate
AnQiCMS中存储的时间戳通常是10位数字。为了将其显示为人类可读的日期格式,您可以使用 stampToDate 函数:
<span>发布日期:{{ stampToDate(article.CreatedTime, "2006-01-02") }}</span>
<span>更新时间:{{ stampToDate(article.UpdatedTime, "2006-01-02 15:04:05") }}</span>
请注意,日期格式字符串 2006-01-02 15:04:05 是Golang特有的参考时间格式,用来表示年、月、日、时、分、秒。
3. 截取文本:|truncatechars 或 |truncatewords
当您需要显示文章摘要或简短描述时,可以使用截取过滤器来限制字符数或单词数,并自动在末尾添加省略号:
{{ item.Description|truncatechars:100 }} (截取前100个字符)
{{ item.Description|truncatewords:20 }} (截取前20个单词)
4. 其他常用过滤器:
|lower/|upper:将字符串转换为小写/大写。|add:数字:将变量与指定数字相加。|replace:"旧词,新词":替换字符串中的特定内容。|length:获取字符串、数组或对象集合的长度。|join:", ":将数组元素用逗号和空格连接成一个字符串。
灵活的变量定义:with 和 set 标签
有时,您可能需要在模板内部定义一些临时变量,以便代码更清晰或避免重复计算。AnQiCMS提供了 with 和 set 标签来实现这一目的。
{% with ... %}: 用于在模板块中定义临时的、块级作用域的变量,常与include标签结合使用,向被引入的模板传递参数。{% with pageTitle="我的自定义页面标题", pageKeywords="关键字1,关键字2" %} {% include "partial/header.html" with title=pageTitle keywords=pageKeywords only %} {% endwith %}{% set ... %}: 用于在当前模板中定义