下面我将为您详细解释几种常见的调用方法,从最简单到最灵活,并提供最佳实践建议。

核心方法:使用 {include}
这是DedeCMS内置的模板标签,用于在当前模板文件中插入并执行另一个模板文件。
基础调用(推荐)
这是最常用、最规范的方法,它确保了无论你的网站在哪个目录下,都能正确地找到头部文件。
语法:
{include file='head.htm'/}
参数说明:
file:指定要包含的文件名。
- 放在标签末尾,表示这是一个自闭合标签,是DedeCMS的规范写法。
示例:
在你的首页模板文件 index.htm 中,你希望在 <body> 标签之后立即显示头部内容,就可以这样写:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">{dede:global.cfg_webname/}</title>
</head>
<body>
<!-- 调用头部文件 -->
{include file='head.htm'/}
<!-- 页面其他内容,例如首页焦点图等 -->
<div class="main-content">
<!-- ... -->
</div>
<!-- 调用底部文件 -->
{include file='footer.htm'/}
</body>
</html>
带目录路径的调用
如果你的头部文件不在默认的模板目录下,或者你的网站结构比较复杂,你需要指定文件的完整相对路径。
假设你的模板目录结构如下:
/templets
/default
/index
index.htm
/article
article_list.htm
head.htm
footer.htm
-
在 /templets/default/index/index.htm 中调用:
因为 head.htm 和 index.htm 在同一级目录,所以直接使用 {include file='head.htm'/} 即可。
-
在 /templets/default/article/article_list.htm 中调用:
head.htm 在上一级目录,所以需要使用 来返回上一级。
{include file='../head.htm'/}
最佳实践:使用 @me 变量
为了避免手动处理路径,DedeCMS提供了一个更强大的方法:使用 @me 变量来获取当前模板所在的目录。
语法:
{include file="@me/../../head.htm"/}
这里的 @me 会被替换为当前模板文件的路径,如果当前文件是 /templets/default/article/article_list.htm,@me /templets/default/article,@me/../../ 就会指向 /templets/default/,从而找到 head.htm。
这种方法非常灵活,即使你移动文件,只要相对关系不变,调用依然有效。
为什么要使用 {include} 而不是PHP的 include?
虽然你也可以在DedeCMS模板中使用PHP代码,<?php include(DEDETEMPLATE.'/head.htm'); ?>,但强烈不推荐这样做。
原因如下:
- 安全风险:直接在模板中写PHP代码,如果模板文件被上传或修改,可能带来安全隐患。
- 模板分离:DedeCMS的设计理念是将PHP逻辑与HTML模板分离,使用
{include} 标签是符合其设计规范的“模板语言”行为。
- 可维护性:使用DedeCMS标签,代码更清晰,对于不熟悉PHP的前端开发者也更友好。
- 灵活性:DedeCMS的
{include} 标签可以在标签内使用其他DedeCMS标签,{include file='head_{dede:field typeid/}.htm'/},这是PHP的 include 无法做到的。
完整的头部文件 head.htm 通常包含什么?
一个标准的 head.htm 文件通常包含网站的 <head> 部分内容,
<!-- head.htm 文件内容 -->
<meta http-equiv="Content-Type" content="text/html; charset={dede:global.cfg_soft_lang/}" />{dede:field.title/}_{dede:global.cfg_webname/}</title>
<meta name="description" content="{dede:field.description function='html2text(@me)'/}" />
<meta name="keywords" content="{dede:field.keywords/}" />
<link rel="stylesheet" type="text/css" href="{dede:global.cfg_templets_skin/}/style/css/style.css" />
<script type="text/javascript" src="{dede:global.cfg_templets_skin/}/js/jquery.min.js"></script>
<!-- 其他meta标签、CSS、JS文件等 -->
{dede:global.cfg_templets_skin/} 这个标签非常重要,它会自动获取当前模板的路径,避免了硬编码路径带来的问题。
总结与最佳实践
- 首选方法:在所有需要引入头部的模板文件中,使用
{include file='head.htm'/}。
- 路径处理:
head.htm 在模板根目录(如 /templets/default/),所有子模板调用时都使用 ../head.htm。
- 为了更健壮,推荐使用
@me 变量来构建路径,{include file="@me/../head.htm"/}。
- 模板变量:在
head.htm 内部,务必使用DedeCMS的全局变量(如 {dede:global.cfg_webname/})和模板变量(如 {dede:field.title/})来动态生成内容,而不是写死。
- CSS/JS路径:在
head.htm 中引入CSS和JS文件时,使用 {dede:global.cfg_templets_skin/} 来表示当前模板目录,确保资源路径正确。
遵循以上方法,你的DedeCMS网站模板结构将会非常清晰、易于维护和扩展。
这是DedeCMS内置的模板标签,用于在当前模板文件中插入并执行另一个模板文件。
基础调用(推荐)
这是最常用、最规范的方法,它确保了无论你的网站在哪个目录下,都能正确地找到头部文件。
语法:
{include file='head.htm'/}
参数说明:
file:指定要包含的文件名。- 放在标签末尾,表示这是一个自闭合标签,是DedeCMS的规范写法。
示例:
在你的首页模板文件 index.htm 中,你希望在 <body> 标签之后立即显示头部内容,就可以这样写:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">{dede:global.cfg_webname/}</title>
</head>
<body>
<!-- 调用头部文件 -->
{include file='head.htm'/}
<!-- 页面其他内容,例如首页焦点图等 -->
<div class="main-content">
<!-- ... -->
</div>
<!-- 调用底部文件 -->
{include file='footer.htm'/}
</body>
</html>
带目录路径的调用
如果你的头部文件不在默认的模板目录下,或者你的网站结构比较复杂,你需要指定文件的完整相对路径。
假设你的模板目录结构如下:
/templets
/default
/index
index.htm
/article
article_list.htm
head.htm
footer.htm
-
在
/templets/default/index/index.htm中调用: 因为head.htm和index.htm在同一级目录,所以直接使用{include file='head.htm'/}即可。 -
在
/templets/default/article/article_list.htm中调用:head.htm在上一级目录,所以需要使用 来返回上一级。{include file='../head.htm'/}
最佳实践:使用 @me 变量
为了避免手动处理路径,DedeCMS提供了一个更强大的方法:使用 @me 变量来获取当前模板所在的目录。
语法:
{include file="@me/../../head.htm"/}
这里的 @me 会被替换为当前模板文件的路径,如果当前文件是 /templets/default/article/article_list.htm,@me /templets/default/article,@me/../../ 就会指向 /templets/default/,从而找到 head.htm。
这种方法非常灵活,即使你移动文件,只要相对关系不变,调用依然有效。
为什么要使用 {include} 而不是PHP的 include?
虽然你也可以在DedeCMS模板中使用PHP代码,<?php include(DEDETEMPLATE.'/head.htm'); ?>,但强烈不推荐这样做。
原因如下:
- 安全风险:直接在模板中写PHP代码,如果模板文件被上传或修改,可能带来安全隐患。
- 模板分离:DedeCMS的设计理念是将PHP逻辑与HTML模板分离,使用
{include}标签是符合其设计规范的“模板语言”行为。 - 可维护性:使用DedeCMS标签,代码更清晰,对于不熟悉PHP的前端开发者也更友好。
- 灵活性:DedeCMS的
{include}标签可以在标签内使用其他DedeCMS标签,{include file='head_{dede:field typeid/}.htm'/},这是PHP的include无法做到的。
完整的头部文件 head.htm 通常包含什么?
一个标准的 head.htm 文件通常包含网站的 <head> 部分内容,
<!-- head.htm 文件内容 -->
<meta http-equiv="Content-Type" content="text/html; charset={dede:global.cfg_soft_lang/}" />{dede:field.title/}_{dede:global.cfg_webname/}</title>
<meta name="description" content="{dede:field.description function='html2text(@me)'/}" />
<meta name="keywords" content="{dede:field.keywords/}" />
<link rel="stylesheet" type="text/css" href="{dede:global.cfg_templets_skin/}/style/css/style.css" />
<script type="text/javascript" src="{dede:global.cfg_templets_skin/}/js/jquery.min.js"></script>
<!-- 其他meta标签、CSS、JS文件等 -->
{dede:global.cfg_templets_skin/} 这个标签非常重要,它会自动获取当前模板的路径,避免了硬编码路径带来的问题。
总结与最佳实践
- 首选方法:在所有需要引入头部的模板文件中,使用
{include file='head.htm'/}。 - 路径处理:
head.htm在模板根目录(如/templets/default/),所有子模板调用时都使用../head.htm。- 为了更健壮,推荐使用
@me变量来构建路径,{include file="@me/../head.htm"/}。
- 模板变量:在
head.htm内部,务必使用DedeCMS的全局变量(如{dede:global.cfg_webname/})和模板变量(如{dede:field.title/})来动态生成内容,而不是写死。 - CSS/JS路径:在
head.htm中引入CSS和JS文件时,使用{dede:global.cfg_templets_skin/}来表示当前模板目录,确保资源路径正确。
遵循以上方法,你的DedeCMS网站模板结构将会非常清晰、易于维护和扩展。
