如何在安企CMS模板中引用公共代码片段(如页头、页脚)来统一页面显示?

在网站运营中,保持页面显示的一致性至关重要。一个统一的网站外观不仅能提升品牌专业度,还能优化用户体验。AnqiCMS 提供了强大且灵活的模板机制,让我们可以高效地管理网站的公共元素,例如页头和页脚,从而避免重复编写代码,确保全站风格的统一。

AnqiCMS 的模板系统借鉴了 Django 模板引擎的语法,其核心思想是允许开发者定义可重用的代码片段和页面骨架。这使得我们能够像搭建乐高积木一样构建网站,既保持整体结构稳固,又能灵活替换和组合局部模块。

核心理念:模板继承(Extends)

想象一下,你正在设计一栋大楼。模板继承就好比这张大楼的整体建筑蓝图。所有的楼层(具体页面)都将遵循这张蓝图的基本结构,例如承重墙、电梯井的位置都是固定的,但每个房间的内部装修(页面内容)可以根据需要定制。

在 AnqiCMS 中,我们通常会创建一个名为 base.html(或类似名称)的文件作为网站的整体布局文件。这个文件包含了网站的通用结构,比如 HTML 文档类型声明、head 区域(包含 CSS 引入、元数据等)、页头、页脚以及一个预留给主要内容的区域。

在这个 base.html 文件中,我们使用 {% block 块名 %}{% endblock %} 这样的标签来定义可被子模板填充或覆盖的内容区域。例如:

<!-- template/你的模板目录/base.html -->
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>{% tdk with name="Title" siteName=true %}</title>
    <!-- 引入公共 CSS/JS 等 -->
    <link rel="stylesheet" href="{% system with name="TemplateUrl" %}/css/main.css">
    {# 这里可以放置网站图标、SEO关键词描述等通用头部信息 #}
</head>
<body>
    <header>
        {# 这里我们将引入页头公共代码片段 #}
    </header>

    <main>
        {% block content %}
            {# 这是主要内容区域,每个具体页面将在这里填充其独特内容 #}
        {% endblock %}
    </main>

    <footer>
        {# 这里我们将引入页脚公共代码片段 #}
    </footer>

    <script src="{% system with name="TemplateUrl" %}/js/main.js"></script>
    {# 这里可以放置其他全局性的 JS 脚本 #}
</body>
</html>

当我们需要创建一个具体页面(如首页、文章详情页)时,我们只需在该页面的模板文件的第一行声明它继承自 base.html,然后通过同名的 {% block %} 标签来填充或覆盖父模板中对应的内容区域:

<!-- template/你的模板目录/index.html (首页示例) -->
{% extends 'base.html' %} {# 声明此模板继承自 base.html #}

{% block content %}
    <section class="banner">
        {# 这里是首页独有的轮播图内容 #}
        {% bannerList banners %}{% for item in banners %}<img src="{{item.Logo}}" alt="{{item.Alt}}">{% endfor %}{% endbannerList %}
    </section>

    <section class="latest-articles">
        <h2>最新文章</h2>
        <ul>
            {% archiveList archives with type="list" moduleId="1" limit="5" %}
                {% for item in archives %}
                    <li><a href="{{item.Link}}">{{item.Title}}</a></li>
                {% endfor %}
            {% endarchiveList %}
        </ul>
    </section>
    {# 首页的其他特定内容 #}
{% endblock %}

通过模板继承,我们成功地将网站的通用布局与页面独有内容分离,极大地提高了模板的可维护性。

代码片段的灵活引用(Include)

如果说模板继承是网站的“骨架”,那么 include 标签就是组成这个骨架或骨架上“肌肉”的“乐高积木”。它用于将较小的、可重用的代码片段(如导航菜单、侧边栏、版权信息块)插入到任何模板文件的指定位置。

这些小的代码片段通常存放在模板目录下的 partial/ 子目录中,便于管理。例如,你可以创建 partial/header.html 存放页头内容,partial/footer.html 存放页脚内容。

base.html 或任何其他模板中,引用这些片段的方式非常简单:

<!-- 在 base.html 中引用页头片段 -->
<header>
    {% include 'partial/header.html' %} {# 引入专门的页头文件 #}
</header>

<!-- 在 base.html 中引用页脚片段 -->
<footer>
    {% include 'partial/footer.html' %} {# 引入专门的页脚文件 #}
</footer>

include 标签还支持一些高级用法:

  • 传递变量:你可以使用 with 关键字向被引入的片段传递额外的变量。例如,如果你的页头需要显示当前页面的一些特定信息:
    
    {% include 'partial/header.html' with current_page='index' user_name='游客' %}
    
    然后在 partial/header.html 中就可以使用 {{ current_page }}{{ user_name }}
  • 条件引入:如果你不确定某个片段是否存在,可以使用 if_exists 来避免报错:
    
    {% include 'partial/custom_sidebar.html' if_exists %}
    
    这样,如果文件存在则引入,不存在则忽略。

实践中的应用:页头、页脚与导航

现在,让我们结合 AnqiCMS 内置的标签功能,看看如何在这些公共代码片段中引用动态数据,实现网站内容的统一显示。

1. 统一的页头(partial/header.html

页头通常包含网站 Logo、主导航、搜索框等。通过 AnqiCMS 提供的系统标签,我们可以轻松获取这些动态数据。

”`