安企CMS(AnQiCMS)作为一个高效灵活的内容管理系统,其强大的模板功能是搭建个性化网站的关键。在模板中灵活地定义和使用变量,能让我们轻松地处理和展示各类数据,无论是文章标题、分类信息,还是自定义字段内容,都能通过变量实现动态调用,让网站充满活力。

接下来,我们将深入探讨在AnQiCMS模板中如何定义、获取和运用变量,帮助大家更高效地构建和维护网站。

一、变量的基础:认识与声明

在AnQiCMS的模板语法中,变量是用于存储和显示数据的占位符。它们让我们的模板能够接收来自后端的数据,并根据需要将其渲染到页面上。

1. 变量的输出形式

AnQiCMS的模板使用双花括号 {{ 变量名 }} 来输出变量的值。当你需要在页面上展示一个特定数据时,只需将该数据的变量名放置于双花括号中即可。例如,{{ siteName }} 可能会显示网站的名称。

在命名变量时,通常遵循驼峰命名法(CamelCase),即每个单词的首字母大写,例如 archive.Idarchive.Title

2. 声明变量:{% with %}{% set %}

在某些场景下,我们需要在模板内部定义自己的变量,或者将复杂标签的输出结果存储起来以便重复使用。AnQiCMS提供了两种主要的声明变量的方式:

  • {% with ... %} 标签: with 标签允许你在一个特定的代码块内定义一个或多个变量。这些变量只在该 {% with %}{% endwith %} 之间有效。这非常适合为 include 标签传递参数,或者在局部范围内使用临时变量。

    {% with pageTitle="最新文章列表" %}
        <h1>{{ pageTitle }}</h1>
        {# pageTitle变量在此处有效 #}
    {% endwith %}
    {# pageTitle变量在此处已失效 #}
    

    你也可以同时定义多个变量,用空格隔开:

    {% with title="产品介绍" keywords="产品,详情" %}
        <title>{{ title }}</title>
        <meta name="keywords" content="{{ keywords }}">
    {% endwith %}
    
  • {% set ... %} 标签: set 标签用于在当前模板文件中声明一个变量,它的作用域从声明之处开始,直到模板文件结束。这对于在模板的不同部分共享数据非常有用。

    {% set welcomeMessage = "欢迎来到我们的网站!" %}
    <header>
        {{ welcomeMessage }}
    </header>
    <main>
        <p>{{ welcomeMessage }}</p>
    </main>
    

    小贴士: {% with %} 更适合定义局部、临时的变量,而 {% set %} 更适合定义在整个模板中都需要使用的变量。合理选择可以避免变量名冲突,并提高代码的可读性。

二、变量的来源:数据从何而来

AnQiCMS中的变量并非凭空而来,它们主要通过内置的模板标签获取后端数据,或者直接从URL参数中读取。

1. 标签赋能:从内置标签获取数据

AnQiCMS内置了丰富的标签,用于获取网站的各种数据。这些标签通常会在内部处理数据查询和逻辑,并将结果赋给一个你指定的变量名,供你在模板中使用。

  • 获取单条数据: 许多标签用于获取单一实体的数据,例如 system(系统设置)、contact(联系方式)、tdk(页面TDK)、archiveDetail(文章详情)、categoryDetail(分类详情)等。

    这些标签通过 变量名称 with name="字段名称" 的形式,将特定字段的值直接赋值给 变量名称

    {# 获取网站名称,并赋值给siteName变量 #}
    {% system siteName with name="SiteName" %}
    <p>网站名称:{{ siteName }}</p>
    
    
    {# 直接获取当前文章的标题 #}
    <h1>{% archiveDetail with name="Title" %}</h1>
    
  • 获取列表数据: 另一些标签用于获取数据集合(如文章列表、分类列表、导航列表),它们会将一个数组或切片赋值给指定的变量名。这时,你就需要使用 {% for %} 循环标签来遍历这个变量,逐一显示其中的每一项数据。

    {# 获取文章列表,并赋值给archives变量 #}
    {% archiveList archives with type="list" limit="5" %}
        <ul>
        {% for item in archives %}
            <li><a href="{{ item.Link }}">{{ item.Title }}</a></li>
        {% endfor %}
        </ul>
    {% endarchiveList %}
    

    在这个例子中,archives 是一个包含了多篇文章数据的列表变量,item 则是 for 循环中每一篇文章的临时变量。

  • 获取自定义参数:archiveParams 对于后台为文章或产品模型自定义的额外字段,可以通过 archiveParams 标签获取。这个标签会将自定义字段的数据作为一个列表或映射(map)赋给变量,你可以根据需要遍历显示。

    {# 获取当前文章的所有自定义参数 #}
    {% archiveParams params %}
        <div class="custom-fields">
        {% for field in params %}
            <p>{{ field.Name }}:{{ field.Value }}</p>
        {% endfor %}
        </div>
    {% endarchiveParams %}
    

2. URL参数与全局数据

AnQiCMS的模板引擎也能访问一些全局数据或从URL中获取参数。例如,在搜索页面,你可能需要获取URL中的搜索关键词 q。文档中提到 archiveList 标签在 q 参数未指定时会自动读取URL中的 q 查询参数,暗示了可以通过 urlParams.q 这样的形式访问URL参数。

{# 假设URL是 /search?q=安企CMS,这里可以获取搜索关键词 #}
<input type="text" name="q" value="{{ urlParams.q }}" placeholder="请输入搜索关键词">

三、变量的深度:数据处理与展示

获取到变量后,我们可以通过多种方式进一步处理和展示它们,让页面内容更具表现力。

1. 访问变量属性:点号操作符 .

当一个变量存储的是一个对象或结构体时(比如 item 变量代表一篇文章对象),你可以使用点号 . 来访问它的属性。

”`twig {# item 是一个文章对象,通过点号访问其