在构建网站时,我们都希望内容能根据不同的页面、不同的数据而灵活变动,而不是一成不变的静态文本。AnQiCMS 凭借其基于 Go 语言的高性能架构和灵活的类 Django 模板引擎,为我们提供了强大的动态内容展示能力。而这一切的核心,都离不开“变量”的定义与使用。

掌握在 AnQiCMS 模板中如何定义和使用变量,就像掌握了开启网站动态活力的钥匙。这不仅仅是技术操作,更是实现内容营销、SEO 优化和用户体验提升的关键一步。

核心:变量的定义与使用基础

AnQiCMS 的模板语法简洁直观,它沿用了类似 Django 模板引擎的风格。最直接的方式,就是使用双花括号 {{ 变量名 }} 来显示动态内容。当系统渲染页面时,它会查找这些花括号中的变量名,并将其替换为实际的数据。

变量的命名通常遵循驼峰命名法,例如 archive.Idarchive.Title。这里的 archive 通常代表当前页面所加载的文章、产品等内容实体,而 IdTitle 则是该实体所具有的属性。

从系统内置标签获取数据

AnQiCMS 为我们预置了大量的模板标签,这些标签在被调用时,会隐式地将后台配置或数据库中的数据“注入”到模板环境中,供我们以变量的形式使用。

  1. 全局站点与联系信息: 如果想在网站的任何位置显示公司名称、联系电话、备案号等全局信息,可以使用 systemcontact 标签。例如,想显示网站名称:{% system siteName with name="SiteName" %}{{ siteName }}。这里,system 标签获取了名为 “SiteName” 的系统配置,并将其赋值给 siteName 变量,然后我们通过 {{ siteName }} 将其显示出来。 同样,要显示联系电话,可以这样:{% contact cellphone with name="Cellphone" %}{{ cellphone }}

  2. 页面特定信息(TDK): 每个页面的标题(Title)、关键词(Keywords)和描述(Description)对 SEO 至关重要。tdk 标签能动态获取这些信息。比如在 <title> 标签中显示页面标题:<title>{% tdk with name="Title" siteName=true %}</title>。这里的 siteName=true 表示会在页面标题后自动加上网站名称,增强品牌识别度。

  3. 内容详情页: 当我们访问一篇具体的文章或产品页面时,页面主体内容就是最典型的动态信息。archiveDetail 标签用于获取当前文档的详细数据,这些数据可以直接通过 archive.属性名 的形式调用,比如 {{ archive.Title }} 会显示文章标题,{{ archive.Content }} 会显示文章正文。 例如,在一个文章详情页,我们可以这样展示内容:

    <h1>{{ archive.Title }}</h1>
    <div>
        发布时间:{{ stampToDate(archive.CreatedTime, "2006-01-02") }}
        阅读量:{{ archive.Views }}
    </div>
    <div class="article-content">
        {{ archive.Content|safe }}
    </div>
    

    这里 archive.Titlearchive.CreatedTimearchive.Views 都是直接可用的变量。archive.Content 后面的 |safe 是一个过滤器,它告诉模板引擎这段内容是安全的 HTML,不需要进行转义,从而确保富文本编辑器中排版好的内容能正确显示。

在循环中定义和使用变量

网站往往需要展示列表数据,比如文章列表、产品列表等。for 循环标签是处理这类动态内容的利器,它会在每次迭代时,将当前项的数据赋值给一个临时变量。

例如,显示一个文章列表:

{% archiveList archives with type="page" limit="10" %}
    {% for item in archives %}
    <li>
        <a href="{{ item.Link }}">
            <h3>{{ item.Title }}</h3>
            <p>{{ item.Description|truncatechars:100 }}</p>
            <span>发布日期:{{ stampToDate(item.CreatedTime, "2006-01-02") }}</span>
        </a>
    </li>
    {% empty %}
    <li>目前还没有任何文章。</li>
    {% endfor %}
{% endarchiveList %}

在这个例子中,archivesarchiveList 标签获取到的文章集合,而 {% for item in archives %} 语句让 item 成为每次循环中的当前文章对象。我们就可以通过 item.Linkitem.Title 等来访问每篇文章的属性。item.Description|truncatechars:100 展示了如何使用 truncatechars 过滤器截取描述内容,防止过长。

进阶:在模板内部创建和操作变量

除了从内置标签获取数据,我们还可以直接在模板中声明和操作变量,这为模板设计带来了更大的灵活性。

使用 with 标签定义临时变量

{% with ... %} 标签允许你在一个局部范围内定义临时的变量,这些变量只在该 with 标签的开始和结束之间有效。这在需要为特定区块或 include 进来的模板片段传递参数时非常方便。

{% with headerTitle="我的博客首页" headerKeywords="技术,分享,CMS" %}
    <head>
        <title>{{ headerTitle }}</title>
        <meta name="keywords" content="{{ headerKeywords }}">
    </head>
{% endwith %}

这里,headerTitleheaderKeywords 只在 with 标签内部可用。如果我们将它们传递给一个公共的 header.html 模板,可以这样写: {% include "partial/header.html" with title=headerTitle keywords=headerKeywords %}

使用 set 标签声明更灵活的变量

{% set ... %} 标签则提供了更广泛的变量声明能力。它定义的变量在当前模板文件中都是可用的,而不仅仅局限于一个区块,这在进行一些计算或存储中间结果时非常有用。

”`twig {% set greeting = “欢迎来到AnQiCMS的世界!” %}

{{ greeting }}

{#