include 标签是什么?
include 标签的作用类似于其他编程语言中的 include 或 require 语句,它的主要功能是在当前模板文件中,插入并执行另一个指定的模板文件。

通过使用 include,你可以将一个复杂的页面(如首页)拆分成多个独立的、功能单一的模块文件(如头部、导航、侧边栏、底部等),这样做的好处非常明显:
- 代码复用:像头部、底部、导航栏这些在多个页面都会出现的部分,只需要写一次,然后通过
include引入到各个页面中。 - 维护方便:当需要修改头部或底部信息时,只需要修改对应的
*.htm文件,所有引用了该文件的页面都会自动更新,无需逐个修改。 - 结构清晰:将大模板拆分成小模块,使得模板文件的结构更加清晰,易于阅读和管理。
include 标签的基本语法
include 标签有两种基本用法:普通引入和 按条件引入。
普通引入(最常用)
这是最简单的形式,直接引入一个文件。
语法:

{dede:include filename="文件路径/文件名.htm" /}
filename:必需属性,指定要引入的模板文件的路径和名称。- 路径是相对于
templets/你的模板目录/目录的。 - 你的模板目录是
default,filename="head.htm"就是指向templets/default/head.htm文件。
- 路径是相对于
示例: 假设你的网站模板目录结构如下:
templets/
└── default/
├── index.htm (首页主模板)
├── head.htm (头部文件)
├── footer.htm (底部文件)
└── article_list.htm (文章列表页模板)
在 index.htm 中使用 include 来引入头部和底部:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">{dede:global.cfg_webname/}</title>
</head>
<body>
<!-- 引入头部文件 -->
{dede:include filename="head.htm" /}
<div class="main-content">
<!-- 这里是首页的主要内容区域 -->
<h1>欢迎来到我的网站</h1>
<!-- 其他首页专用代码... -->
</div>
<!-- 引入底部文件 -->
{dede:include filename="footer.htm" /}
</body>
</html>
按条件引入
有时,你可能希望根据不同的条件来引入不同的文件,这时可以使用 if 条件语句结合 include。
语法:

{dede:if 条件}
{dede:include filename="文件路径A/文件A.htm" /}
{else}
{dede:include filename="文件路径B/文件B.htm" /}
{/dede:if}
示例: 假设你在文章详情页,希望根据文章所属的不同栏目(ID)来显示不同的侧边栏。
<!-- 文章详情页模板 (article_detail.htm) -->
<div class="content">
<!-- 文章内容... -->
</div>
<div class="sidebar">
{dede:if field:typeid == '1'}
{dede:include filename="sidebar/news.htm" /}
{else if field:typeid == '2'}
{dede:include filename="sidebar/download.htm" /}
{else}
{dede:include filename="sidebar/default.htm" /}
{/dede:if}
</div>
在这个例子中,如果文章的栏目ID(typeid)是 1,就引入 news.htm;如果是 2,就引入 download.htm;否则就引入 default.htm。
include 标签的进阶用法
除了基本的文件引入,include 还可以传递参数,实现更灵活的功能。
传递参数给被引入的文件
你可以在 include 标签中使用 name 属性来传递自定义的变量。
语法:
{dede:include filename="file.htm" name='value' /}
在被引入的 file.htm 中,可以通过 {dede:global.name/} 来获取这个 value。
示例:
在首页的头部,你可能想传递一个当前页面的标识('home')给 head.htm,以便让头部高亮对应的导航项。
在 index.htm 中:
{dede:include filename="head.htm" name='page_type' value='home' /}
或者使用更简洁的 key='value' 语法(DedeCMS 5.7+ 推荐):
{dede:include filename="head.htm" page_type='home' /}
在 head.htm 中获取参数:
<head>{dede:global.cfg_webname/}</title>
<script>
var currentPage = '{dede:global.page_type/}';
// 可以用 currentPage 变量来做一些JS判断
if (currentPage == 'home') {
// 给首页导航添加高亮样式
document.getElementById('nav-home').className = 'active';
}
</script>
</head>
注意:传递的参数在引入的模板中,通过 {dede:global.参数名/} 来获取。
include 与 lib 文件夹中的 *.inc.php 文件
在 Dedecms 的早期版本或官方默认模板中,你可能会看到一种不同的引入方式:
<?php
require_once(dirname(__FILE__)."/include/config_base.php");
require_once(DEDEINC."/dedetag.class.php");
// ... 其他PHP代码
?>
或者在模板文件中看到:
{dede:include filename="head.htm" ismake="yes"/}
这里的 ismake="yes" 是一个特殊属性,它告诉 Dedecms 在解析模板时,不仅要引入 head.htm 的内容,还要执行该文件中可能包含的 PHP 代码。
现代 Dedecms 的推荐做法:
- 模板文件(
.htm):只包含 HTML 结构和 Dedecms 标签,尽量不写 PHP 代码。 - 功能文件(
.php):将复杂的 PHP 逻辑写在include/或plus/目录下的.php文件中(include/func_xxx.php)。 - 通过标签调用功能:在模板中通过自定义标签(如
{dede:mytag name='xxx' /})来调用这些 PHP 文件的功能,而不是直接在模板里require。
这样做能更好地实现“逻辑”与“表现”的分离,使模板更纯净、更易于维护。
总结与最佳实践
| 特性 | 说明 | 示例 |
|---|---|---|
| 核心功能 | 在一个模板文件中插入并执行另一个模板文件。 | {dede:include filename="head.htm" /} |
| 路径规则 | filename 的路径相对于 templets/当前模板目录/。 |
filename="public/header.htm" |
| 主要优点 | 代码复用、维护方便、结构清晰。 | 将头部、底部等通用部分模块化。 |
| 条件引入 | 使用 {dede:if}...{else}...{/dede:if} 根据条件引入不同文件。 |
根据栏目ID引入不同的侧边栏。 |
| 参数传递 | 使用 key='value' 语法传递自定义变量。 |
{dede:include filename="head.htm" page='home' /} |
| 参数获取 | 在引入的模板中通过 {dede:global.key/} 获取参数值。 |
{dede:global.page/} |
| 最佳实践 | 将模板(HTML)与逻辑(PHP)分离,使用 .htm 存放结构,.php 存放功能,通过标签调用。 |
避免在模板中直接写复杂的 PHP 代码。 |
核心要点:
include 的核心就是“拆分”和“复用”,把你的网站页面想象成一个乐高模型,include 就是那些标准化的乐高积木块(如车门、轮子),你可以把它们轻松地组合到不同的模型(页面)中去,掌握好 include,是高效使用 Dedecms 进行模板开发的第一步。
