AnQiCMS模板引擎的基本语法规则是什么,用于显示内容?

AnQiCMS提供了一套直观且功能强大的模板引擎,它的设计理念是让网站内容的展示既灵活又易于上手。如果您熟悉Django或Blade这类模板语法,那么AnQiCMS的模板引擎对您来说会非常亲切。它致力于将复杂的后端数据以清晰、易读的方式呈现在网站前台,让内容运营者能够专注于内容的创造和优化,而非深陷代码细节。

模板引擎核心语法:构建内容显示的基石

AnQiCMS模板引擎的基本语法主要围绕两种标记方式展开:

  1. 变量输出: 当您需要在页面上直接显示某个数据或内容时,会使用双花括号 {{ 变量名称 }}。例如,要显示网站的名称,您可能看到 {{ siteName }} 这样的标记。这里值得注意的是,模板中的变量通常遵循驼峰命名法则,即每个单词的首字母大写,例如 archive.Titlecategory.Link

  2. 逻辑与控制流: 对于更复杂的展示逻辑,比如条件判断(如果满足某个条件就显示某段内容)或循环(遍历一组数据并逐一显示),模板引擎提供了单花括号加百分号的标记方式 {% 标签名 参数 %}。这类标签通常需要成对出现,有开始标签就必须有结束标签,如 {% 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至关重要,它可以根据当前页面类型(首页、文章、分类等)自动生成或获取设定的titlekeywordsdescription
    
    <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 %}
    
  • 文档详情标签 (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): 方便用户在阅读详情时进行内容切换。