AnQiCMS提供了一套直观且功能强大的模板引擎,它的设计理念是让网站内容的展示既灵活又易于上手。如果您熟悉Django或Blade这类模板语法,那么AnQiCMS的模板引擎对您来说会非常亲切。它致力于将复杂的后端数据以清晰、易读的方式呈现在网站前台,让内容运营者能够专注于内容的创造和优化,而非深陷代码细节。
模板引擎核心语法:构建内容显示的基石
AnQiCMS模板引擎的基本语法主要围绕两种标记方式展开:
变量输出: 当您需要在页面上直接显示某个数据或内容时,会使用双花括号
{{ 变量名称 }}。例如,要显示网站的名称,您可能看到{{ siteName }}这样的标记。这里值得注意的是,模板中的变量通常遵循驼峰命名法则,即每个单词的首字母大写,例如archive.Title或category.Link。逻辑与控制流: 对于更复杂的展示逻辑,比如条件判断(如果满足某个条件就显示某段内容)或循环(遍历一组数据并逐一显示),模板引擎提供了单花括号加百分号的标记方式
{% 标签名 参数 %}。这类标签通常需要成对出现,有开始标签就必须有结束标签,如{% if 条件 %}...{% endif %}或{% for item in list %}...{% endfor %}。这确保了逻辑块的完整性。
在模板文件的组织上,AnQiCMS约定使用 .html 作为模板文件的后缀,并将它们统一存放在站点的 /template 目录下。而图片、CSS样式、JavaScript脚本等静态资源则独立存放在 /public/static/ 目录中。为了确保页面正常显示,所有模板文件都应采用UTF8编码。
灵活展示内容:常用标签与实践
AnQiCMS的强大之处在于其丰富的内置标签,它们让显示各种类型的内容变得简单:
获取网站全局信息
- 系统设置标签 (
system): 用于获取网站名称、LOGO、备案号、基础URL等全局配置。<title>{{% system with name="SiteName" %}}</title> <img src="{{% system with name="SiteLogo" %}}" alt="网站Logo" /> - 联系方式标签 (
contact): 轻松调取网站后台设置的联系人、电话、地址、邮箱等信息。电话:{{% contact with name="Cellphone" %}} 地址:{{% contact with name="Address" %}} - 万能TDK标签 (
tdk): 对于SEO至关重要,它可以根据当前页面类型(首页、文章、分类等)自动生成或获取设定的title、keywords和description。<meta name="description" content="{{% tdk with name="Description" %}}">
构建导航与页面结构
- 导航列表标签 (
navList): 用于生成网站的顶部、底部或侧边导航菜单。它能处理多级导航,并根据当前页面状态高亮显示选中项。<ul> {% navList navs %} {% for item in navs %} <li class="{% if item.IsCurrent %}active{% endif %}"> <a href="{{ item.Link }}">{{ item.Title }}</a> </li> {% endfor %} {% endnavList %} </ul> - 面包屑导航标签 (
breadcrumb): 自动生成当前页面到首页的层级路径,提升用户体验。{% breadcrumb crumbs with index="首页" %} {% for item in crumbs %} <span><a href="{{ item.Link }}">{{ item.Name }}</a></span> {% endfor %} {% endbreadcrumb %}
展示内容分类与单页
- 分类列表标签 (
categoryList): 获取文章、产品等内容模型下的分类列表,支持按模型ID和上级分类ID筛选。{% categoryList categories with moduleId="1" parentId="0" %} {% for item in categories %} <h3><a href="{{ item.Link }}">{{ item.Title }}</a></h3> {% endfor %} {% endcategoryList %} - 分类详情标签 (
categoryDetail): 获取特定分类的详细信息,如分类标题、描述、缩略图等。<h1>{{% categoryDetail with name="Title" %}}</h1> <div>{{% categoryDetail with name="Description" %}}</div> - 单页面列表 (
pageList) 和详情 (pageDetail): 类似分类标签,但用于展示“关于我们”、“联系我们”等独立单页的内容。
核心内容:文章与产品展示
这部分是网站内容运营的核心,AnQiCMS提供了强大的标签来处理文章和产品的列表与详情。
- 文档列表标签 (
archiveList): 这是最常用的标签之一,用于获取文章或产品的列表。它支持多种筛选和排序方式:- 按模型ID和分类ID:
moduleId="1" categoryId="1" - 排序:
order="id desc"(最新发布),order="views desc"(浏览量最高) - 列表类型:
type="list"(普通列表),type="page"(带分页的列表),type="related"(相关文章) - 数量限制:
limit="10" - 搜索关键词:
q="关键词"
{% archiveList archives with type="page" moduleId="1" limit="10" %} {% for item in archives %} <a href="{{ item.Link }}"> <h3>{{ item.Title }}</h3> <p>{{ item.Description }}</p> <span>发布日期:{{ stampToDate(item.CreatedTime, "2006-01-02") }}</span> </a> {% endfor %} {% endarchiveList %} - 按模型ID和分类ID:
- 文档详情标签 (
archiveDetail): 用于展示单篇文章或产品的详细内容。可以直接输出文档的标题、正文、浏览量、自定义字段等。<h1>{{% archiveDetail with name="Title" %}}</h1> <div class="content">{{% archiveDetail with name="Content" lazy="data-src" %}|safe}}</div> <span>浏览量:{{% archiveDetail with name="Views" %}}</span> - 上一篇文档 (
prevArchive) 和 下一篇文档 (nextArchive): 方便用户在阅读详情时进行内容切换。