在AnQiCMS模板开发中,我们经常会与两种核心的模板元素打交道:变量输出标签和逻辑控制标签。它们虽然都服务于将动态内容呈现在用户面前,但在功能定位、语法形式和实际作用上有着本质的区别。理解并掌握它们的异同,是高效构建AnQiCMS网站模板的关键。
变量输出标签({{ ... }}):数据展示的直接窗口
想象一下,你的网站是一个精美的橱窗,而变量输出标签,就好比橱窗里陈列的商品。它们的主要职责是直接在页面上显示数据。在AnQiCMS中,这些标签通常以双花括号 {{ ... }} 的形式出现。
当AnQiCMS的后端程序将数据传递给模板时,这些数据会被组织成各种变量。你可以通过变量输出标签,轻松地将这些变量的值“打印”到HTML页面上。这些数据可能来源于系统配置、文章内容、分类信息、用户数据,甚至是动态计算的结果。
例如,如果你想显示当前文章的标题,你可能会看到 {{archive.Title}};如果需要展示网站的名称,则是 {{system.SiteName}};在循环中,每个项目的数据可以通过 {{item.Link}} 或 {{item.CreatedTime}} 来访问。
值得一提的是,AnQiCMS还提供了强大的过滤器(Filter)功能,可以与变量输出标签结合使用。过滤器允许你在输出数据之前对其进行加工、格式化或转换。比如,{{item.CreatedTime|stampToDate("2006-01-02")}} 就能将时间戳格式化为我们熟悉的日期格式,而 {{archive.Content|truncatechars:100}} 则可以截取文章内容的前100个字符并添加省略号。这些过滤器增强了变量输出的灵活性,让数据呈现更加符合设计需求。
此外,你也可以在模板内部使用 {% set variable = value %} 这样的方式临时定义变量,并在后续的 {{variable}} 中使用,这为模板内部的数据处理提供了便利。
逻辑控制标签({% ... %}):模板结构的指挥官
与变量输出标签不同,逻辑控制标签不直接在页面上显示内容。它们是模板的“指挥官”或“架构师”,负责控制模板的结构、布局和动态行为。在AnQiCMS中,这些标签通常以单花括号和百分号 {% ... %} 的形式出现。它们决定了哪些内容在何时、以何种方式被呈现,是构建复杂、动态模板不可或缺的工具。
AnQiCMS提供了多种逻辑控制标签,每种都有其特定的用途:
条件判断 (
{% if ... %}、{% elif ... %}、{% else %}、{% endif %}): 这是最基本的控制流标签,用于根据特定条件显示或隐藏内容。例如,你可以判断用户是否登录,或者某个变量是否有值,然后相应地显示不同的内容区块。{% if archive.Thumb %}只有在文章有缩略图时才渲染图片标签。循环遍历 (
{% for ... in ... %}、{% empty %}、{% endfor %}): 当你需要展示列表数据时,如文章列表、分类列表、友情链接等,循环标签就派上用场了。它会遍历一个集合(数组或切片),并对集合中的每个项目重复渲染其内部的代码。{% empty %}块则可以在集合为空时提供备用内容,提升用户体验。模板包含 (
{% include "template_file.html" %}): 为了提高模板的复用性和可维护性,我们可以将页头、页脚、侧边栏等公共部分或可复用的小组件拆分成独立的文件。include标签可以按需将这些代码片段引入到当前模板中,减少重复编写。它还可以使用with关键词向被包含的模板传递局部变量。模板继承 (
{% extends "base.html" %}、{% block ... %}、{% endblock %}): 这是构建大型网站模板的强大功能。通过定义一个基础骨架模板(通常称为base.html),并使用block标签定义可重写的区域。子模板只需extends父模板,然后重写对应的block即可,大大简化了多页面布局的管理。宏定义 (
{% macro ... %}、{% endmacro %}): 宏类似于编程语言中的函数,允许你定义可复用的代码片段,并传递参数。这对于创建小型、自包含且可在模板中多次调用的UI组件非常有用。变量赋值 (
{% with ... %}、{% endwith %}): 虽然set也能赋值,但with标签更常用于定义一个临时的变量作用域,或者在include标签中传递参数。
核心区别与协同作用
最核心的区别在于:变量输出标签是“做什么”——展示数据;而逻辑控制标签是“怎么做”和“什么时候做”——控制数据的呈现逻辑和模板结构。 变量是内容本身,而逻辑控制标签是内容的容器和调度者。
你可以把变量想象成原材料(例如,一篇文章的标题、内容、图片URL),而逻辑控制标签则是生产线上的机械臂和控制面板。机械臂(for循环)会抓取一批原材料(文章列表),控制面板(if条件)会判断每件原材料的质量(是否有缩略图),然后决定是否将其送入包装环节(img标签和 {{item.Thumb}})。
它们总是协同工作的:
- 你可能会用
{% for item in archives %}循环遍历文章列表,然后用{{item.Title}}输出每篇文章的标题。 - 你可能会用
{% if system.SiteLogo %}判断网站是否设置了Logo,如果设置了,再用<img src="{{system.SiteLogo}}" alt="{{system.SiteName}}">输出Logo图片。
熟练运用这两种标签,你将能够构建出既美观又功能丰富的AnQiCMS网站模板。深入了解每个标签的具体参数和用法(特别是 design-tag.md 和 tag-*.md 等文档),遵循AnQiCMS的模板约定,并善用过滤器、模块化等技巧,将使你的模板开发工作事半功功倍。如果遇到变量无法正常输出,可以使用 dump 过滤器来