在网站运营中,保持页面显示的一致性至关重要。一个统一的网站外观不仅能提升品牌专业度,还能优化用户体验。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 提供的系统标签,我们可以轻松获取这些动态数据。
”`