织梦模板引擎的核心思想是 “模板分离”,即 PHP 逻辑代码(后端)与 HTML 模板代码(前端)分开,获取变量的方式主要分为两大类:

- 在模板文件中使用织梦标签:这是最推荐、最标准的方式,安全且高效。
- 在模板文件中直接嵌入 PHP 代码:这种方式灵活但有风险,需要谨慎使用。
使用织梦标签(推荐方式)
织梦标签是织梦系统预定义的一套函数和语法,用于在模板中调用数据,绝大多数情况下,你都应该使用这种方式。
获取系统全局变量
这些变量通常在系统初始化时被定义,可以在任何模板页直接使用。
| 变量 | 描述 | 示例 |
|---|---|---|
{dede:global name='cfg_webname'/} |
网站名称 | 在 head.htm 或 index.htm 中直接调用 |
{dede:global name='cfg_weburl'/} |
网站根目录URL | <a href="{dede:global name='cfg_weburl'/}">首页</a> |
{dede:global name='cfg_powerby'/} |
网页版权信息 | 通常用在页脚 footer.htm |
{dede:global name='cfg_softname'/} |
系统名称 | 管理系统 |
示例: 在 head.htm 文件中设置网站标题。
获取当前文档/栏目变量({dede:field}
这是最常用的标签,用于获取当前正在浏览的文档或栏目的具体信息。
(图片来源网络,侵删)
属性 (name=)
描述
id
文档 ID
shorttitle
description
文档摘要
writer
作者
source
来源
pubdate
发布时间(时间戳格式)
senddate
更新时间(时间戳格式)
click
点击次数
arcurl
文档链接
typeurl
栏目链接
typename
栏目名称
keywords
litpic
文章缩略图
示例: 在文章详情页 article_article.htm 中显示文章信息。
<h1>{dede:field.title/}</h1>
<div class="info">
<span>作者:{dede:field.writer/}</span>
<span>来源:{dede:field.source/}</span>
<span>发布时间:{dede:field.pubdate function="MyDate('Y-m-d H:i:s',@me)"/}</span>
<span>点击:{dede:field.click/}</span>
</div>
<p>{dede:field.body/}</p>
重要提示:时间格式化
pubdate 和 senddate 默认返回的是 Unix 时间戳(如 1672531200),不方便直接显示,通常需要配合 function 属性进行格式化。
<!-- 格式化为 年-月-日 -->
{dede:field.pubdate function='MyDate("Y-m-d", @me)' /}
<!-- 格式化为 年-月-日 时:分:秒 -->
{dede:field.pubdate function='MyDate("Y-m-d H:i:s", @me)' /}
获取列表页变量({dede:list} 和 {dede:arclist}
在列表循环中,使用 field 来获取当前条目的信息。
示例: 在列表页 list_article.htm 中循环显示文章。
(图片来源网络,侵删)
<ul>
{dede:list pagesize='10'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span class="date">[field:pubdate function="MyDate('Y-m-d', @me)"/]</span>
</li>
{/dede:list}
</ul>
在模板中直接嵌入 PHP 代码(高级/不推荐)
在某些特殊情况下,织梦标签无法满足需求,你可能需要直接在模板里写 PHP 代码,织梦提供了 {dede:name} 标签的 runphp 属性来实现这一点。
使用 {dede:name} 的 runphp 属性
这是在模板中执行 PHP 代码最安全、最官方的方式。
语法:
{dede:name runphp='yes'}php代码;@me;{/dede:name}
runphp='yes':开启 PHP 执行模式。
php代码:你写的 PHP 语句。
@me:这是一个特殊的变量,代表 {dede:name} 标签本身当前的值,如果你需要输出内容,必须对 @me 进行赋值。
- 最后必须有一个分号 结束。
示例1:获取并处理一个系统变量
假设你想获取网站名称,并在其前后加上文字。
<p>欢迎来到:{dede:name runphp='yes'}
$me = '欢迎来到:' . @me;
$me .= '!';
@me = $me; // 将处理后的结果重新赋值给 @me
{/dede:name}</p>
输出效果:<p>欢迎来到:我的织梦网站!</p>
示例2:获取当前栏目的 ID
这是一个非常常见的用法,比如根据不同栏目ID显示不同的内容。
{dede:field.typeid runphp='yes'}
$typeid = @me; // 将当前栏目ID赋值给 $typeid 变量
if($typeid == 1) {
@me = "<div>这是栏目ID为1的内容</div>";
} elseif($typeid == 2) {
@me = "<div>这是栏目ID为2的内容</div>";
} else {
@me = "<div>这是其他栏目的内容</div>";
}
{/dede:field.typeid}
使用全局变量 $GLOBALS
在模板中,你还可以直接访问 PHP 的全局变量 $GLOBALS,这通常用于获取从控制器或函数中传递过来的数据。
示例:
假设你在某个自定义的 PHP 文件中设置了 $GLOBALS['my_custom_var'] = 'Hello World';,然后在模板中可以这样调用:
<p>自定义变量值:<?php echo $GLOBALS['my_custom_var']; ?></p>
或者
<p>自定义变量值:{dede:name runphp='yes'}@me = $GLOBALS['my_custom_var'];{/dede:name}</p>
注意: 直接使用 <?php ... ?> 在模板中是可行的,但强烈不推荐,因为它破坏了模板的纯净性,且安全性较低。{dede:name runphp='yes'} 是更好的选择。
在 PHP 文件中定义变量,供模板使用
我们需要在 PHP 程序中动态计算或获取数据,然后将它们传递给模板,这通常在 index.php 或自定义的 PHP 文件中完成。
核心函数:Assign()
$dtp->Assign($varname, $value); 函数用于将一个 PHP 变量赋值给一个模板变量。
工作流程:
- PHP 文件(如
index.php):获取数据,并使用 Assign() 将其分配给一个模板变量。
- 模板文件(如
index.htm):使用 {dede:var name='...'/} 标签来接收并显示这个变量。
示例:
步骤 1:修改 index.php
在 index.php 文件中,找到包含模板的代码部分,添加如下逻辑:
// 引入织梦核心文件
require_once (dirname(__FILE__) . "/include/common.inc.php");
// 获取一个动态变量
$welcome_info = "欢迎访问我们的网站!今天是 " . date('Y-m-d');
// 将 $welcome_info 这个变量分配给模板中的 'welcome_info' 变量
$dtp->Assign('welcome_info', $welcome_info);
// ... 其他处理代码 ...
// 显示模板
include(DEDETEMPLATE . '/index.htm');
步骤 2:修改模板文件 index.htm
在 index.htm 的任何位置,使用标签来显示这个变量。
<div class="welcome">
{dede:var name='welcome_info'/}
</div>
这样,当首页被加载时,index.php 中的动态内容就会显示在模板的指定位置。
总结与最佳实践
场景
推荐方法
优点
缺点
调用网站基本信息
{dede:global name='xxx'/}
简单、直接
-
获取当前文章/栏目信息
{dede:field name='xxx'/}
标准化、高效
-
在列表中循环显示数据
{dede:list}...{field:xxx/}...{/dede:list}
逻辑清晰,性能好
-
简单的条件判断或字符串处理
{dede:name runphp='yes'}...{/dede:name}
灵活,在模板内完成
代码复杂时影响模板可读性
复杂的PHP逻辑运算
在PHP文件中使用 $dtp->Assign()
逻辑与视图分离,代码清晰
需要修改PHP文件
绝对不要
直接在模板中使用 <?php ... ?>
破坏模板结构,安全性低,难以维护
-
核心原则:
- 优先使用织梦标签:能满足 90% 以上的需求。
- 简单逻辑用
runphp:对于一些简单的计算和判断,在模板里用 {dede:name runphp='yes'} 处理很方便。
- 复杂逻辑用
Assign:如果涉及到数据库查询、复杂计算等,务必在 PHP 文件中处理好,然后通过 Assign 传递给模板,这是最专业、最安全的做法。
这是最常用的标签,用于获取当前正在浏览的文档或栏目的具体信息。

| 属性 (name=) | 描述 |
|---|---|
id |
文档 ID |
shorttitle |
|
description |
文档摘要 |
writer |
作者 |
source |
来源 |
pubdate |
发布时间(时间戳格式) |
senddate |
更新时间(时间戳格式) |
click |
点击次数 |
arcurl |
文档链接 |
typeurl |
栏目链接 |
typename |
栏目名称 |
keywords |
|
litpic |
文章缩略图 |
示例: 在文章详情页 article_article.htm 中显示文章信息。
<h1>{dede:field.title/}</h1>
<div class="info">
<span>作者:{dede:field.writer/}</span>
<span>来源:{dede:field.source/}</span>
<span>发布时间:{dede:field.pubdate function="MyDate('Y-m-d H:i:s',@me)"/}</span>
<span>点击:{dede:field.click/}</span>
</div>
<p>{dede:field.body/}</p>
重要提示:时间格式化
pubdate 和 senddate 默认返回的是 Unix 时间戳(如 1672531200),不方便直接显示,通常需要配合 function 属性进行格式化。
<!-- 格式化为 年-月-日 -->
{dede:field.pubdate function='MyDate("Y-m-d", @me)' /}
<!-- 格式化为 年-月-日 时:分:秒 -->
{dede:field.pubdate function='MyDate("Y-m-d H:i:s", @me)' /}
获取列表页变量({dede:list} 和 {dede:arclist}
在列表循环中,使用 field 来获取当前条目的信息。
示例: 在列表页 list_article.htm 中循环显示文章。
(图片来源网络,侵删)
<ul>
{dede:list pagesize='10'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span class="date">[field:pubdate function="MyDate('Y-m-d', @me)"/]</span>
</li>
{/dede:list}
</ul>
在模板中直接嵌入 PHP 代码(高级/不推荐)
在某些特殊情况下,织梦标签无法满足需求,你可能需要直接在模板里写 PHP 代码,织梦提供了 {dede:name} 标签的 runphp 属性来实现这一点。
使用 {dede:name} 的 runphp 属性
这是在模板中执行 PHP 代码最安全、最官方的方式。
语法:
{dede:name runphp='yes'}php代码;@me;{/dede:name}
runphp='yes':开启 PHP 执行模式。
php代码:你写的 PHP 语句。
@me:这是一个特殊的变量,代表 {dede:name} 标签本身当前的值,如果你需要输出内容,必须对 @me 进行赋值。
- 最后必须有一个分号 结束。
示例1:获取并处理一个系统变量
假设你想获取网站名称,并在其前后加上文字。
<p>欢迎来到:{dede:name runphp='yes'}
$me = '欢迎来到:' . @me;
$me .= '!';
@me = $me; // 将处理后的结果重新赋值给 @me
{/dede:name}</p>
输出效果:<p>欢迎来到:我的织梦网站!</p>
示例2:获取当前栏目的 ID
这是一个非常常见的用法,比如根据不同栏目ID显示不同的内容。
{dede:field.typeid runphp='yes'}
$typeid = @me; // 将当前栏目ID赋值给 $typeid 变量
if($typeid == 1) {
@me = "<div>这是栏目ID为1的内容</div>";
} elseif($typeid == 2) {
@me = "<div>这是栏目ID为2的内容</div>";
} else {
@me = "<div>这是其他栏目的内容</div>";
}
{/dede:field.typeid}
使用全局变量 $GLOBALS
在模板中,你还可以直接访问 PHP 的全局变量 $GLOBALS,这通常用于获取从控制器或函数中传递过来的数据。
示例:
假设你在某个自定义的 PHP 文件中设置了 $GLOBALS['my_custom_var'] = 'Hello World';,然后在模板中可以这样调用:
<p>自定义变量值:<?php echo $GLOBALS['my_custom_var']; ?></p>
或者
<p>自定义变量值:{dede:name runphp='yes'}@me = $GLOBALS['my_custom_var'];{/dede:name}</p>
注意: 直接使用 <?php ... ?> 在模板中是可行的,但强烈不推荐,因为它破坏了模板的纯净性,且安全性较低。{dede:name runphp='yes'} 是更好的选择。
在 PHP 文件中定义变量,供模板使用
我们需要在 PHP 程序中动态计算或获取数据,然后将它们传递给模板,这通常在 index.php 或自定义的 PHP 文件中完成。
核心函数:Assign()
$dtp->Assign($varname, $value); 函数用于将一个 PHP 变量赋值给一个模板变量。
工作流程:
- PHP 文件(如
index.php):获取数据,并使用 Assign() 将其分配给一个模板变量。
- 模板文件(如
index.htm):使用 {dede:var name='...'/} 标签来接收并显示这个变量。
示例:
步骤 1:修改 index.php
在 index.php 文件中,找到包含模板的代码部分,添加如下逻辑:
// 引入织梦核心文件
require_once (dirname(__FILE__) . "/include/common.inc.php");
// 获取一个动态变量
$welcome_info = "欢迎访问我们的网站!今天是 " . date('Y-m-d');
// 将 $welcome_info 这个变量分配给模板中的 'welcome_info' 变量
$dtp->Assign('welcome_info', $welcome_info);
// ... 其他处理代码 ...
// 显示模板
include(DEDETEMPLATE . '/index.htm');
步骤 2:修改模板文件 index.htm
在 index.htm 的任何位置,使用标签来显示这个变量。
<div class="welcome">
{dede:var name='welcome_info'/}
</div>
这样,当首页被加载时,index.php 中的动态内容就会显示在模板的指定位置。
总结与最佳实践
场景
推荐方法
优点
缺点
调用网站基本信息
{dede:global name='xxx'/}
简单、直接
-
获取当前文章/栏目信息
{dede:field name='xxx'/}
标准化、高效
-
在列表中循环显示数据
{dede:list}...{field:xxx/}...{/dede:list}
逻辑清晰,性能好
-
简单的条件判断或字符串处理
{dede:name runphp='yes'}...{/dede:name}
灵活,在模板内完成
代码复杂时影响模板可读性
复杂的PHP逻辑运算
在PHP文件中使用 $dtp->Assign()
逻辑与视图分离,代码清晰
需要修改PHP文件
绝对不要
直接在模板中使用 <?php ... ?>
破坏模板结构,安全性低,难以维护
-
核心原则:
- 优先使用织梦标签:能满足 90% 以上的需求。
- 简单逻辑用
runphp:对于一些简单的计算和判断,在模板里用 {dede:name runphp='yes'} 处理很方便。
- 复杂逻辑用
Assign:如果涉及到数据库查询、复杂计算等,务必在 PHP 文件中处理好,然后通过 Assign 传递给模板,这是最专业、最安全的做法。
在列表循环中,使用 field 来获取当前条目的信息。
示例: 在列表页 list_article.htm 中循环显示文章。

<ul>
{dede:list pagesize='10'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span class="date">[field:pubdate function="MyDate('Y-m-d', @me)"/]</span>
</li>
{/dede:list}
</ul>
在模板中直接嵌入 PHP 代码(高级/不推荐)
在某些特殊情况下,织梦标签无法满足需求,你可能需要直接在模板里写 PHP 代码,织梦提供了 {dede:name} 标签的 runphp 属性来实现这一点。
使用 {dede:name} 的 runphp 属性
这是在模板中执行 PHP 代码最安全、最官方的方式。
语法:
{dede:name runphp='yes'}php代码;@me;{/dede:name}
runphp='yes':开启 PHP 执行模式。php代码:你写的 PHP 语句。@me:这是一个特殊的变量,代表{dede:name}标签本身当前的值,如果你需要输出内容,必须对@me进行赋值。- 最后必须有一个分号 结束。
示例1:获取并处理一个系统变量
假设你想获取网站名称,并在其前后加上文字。
<p>欢迎来到:{dede:name runphp='yes'}
$me = '欢迎来到:' . @me;
$me .= '!';
@me = $me; // 将处理后的结果重新赋值给 @me
{/dede:name}</p>
输出效果:<p>欢迎来到:我的织梦网站!</p>
示例2:获取当前栏目的 ID
这是一个非常常见的用法,比如根据不同栏目ID显示不同的内容。
{dede:field.typeid runphp='yes'}
$typeid = @me; // 将当前栏目ID赋值给 $typeid 变量
if($typeid == 1) {
@me = "<div>这是栏目ID为1的内容</div>";
} elseif($typeid == 2) {
@me = "<div>这是栏目ID为2的内容</div>";
} else {
@me = "<div>这是其他栏目的内容</div>";
}
{/dede:field.typeid}
使用全局变量 $GLOBALS
在模板中,你还可以直接访问 PHP 的全局变量 $GLOBALS,这通常用于获取从控制器或函数中传递过来的数据。
示例:
假设你在某个自定义的 PHP 文件中设置了 $GLOBALS['my_custom_var'] = 'Hello World';,然后在模板中可以这样调用:
<p>自定义变量值:<?php echo $GLOBALS['my_custom_var']; ?></p>
或者
<p>自定义变量值:{dede:name runphp='yes'}@me = $GLOBALS['my_custom_var'];{/dede:name}</p>
注意: 直接使用 <?php ... ?> 在模板中是可行的,但强烈不推荐,因为它破坏了模板的纯净性,且安全性较低。{dede:name runphp='yes'} 是更好的选择。
在 PHP 文件中定义变量,供模板使用
我们需要在 PHP 程序中动态计算或获取数据,然后将它们传递给模板,这通常在 index.php 或自定义的 PHP 文件中完成。
核心函数:Assign()
$dtp->Assign($varname, $value); 函数用于将一个 PHP 变量赋值给一个模板变量。
工作流程:
- PHP 文件(如
index.php):获取数据,并使用Assign()将其分配给一个模板变量。 - 模板文件(如
index.htm):使用{dede:var name='...'/}标签来接收并显示这个变量。
示例:
步骤 1:修改 index.php
在 index.php 文件中,找到包含模板的代码部分,添加如下逻辑:
// 引入织梦核心文件
require_once (dirname(__FILE__) . "/include/common.inc.php");
// 获取一个动态变量
$welcome_info = "欢迎访问我们的网站!今天是 " . date('Y-m-d');
// 将 $welcome_info 这个变量分配给模板中的 'welcome_info' 变量
$dtp->Assign('welcome_info', $welcome_info);
// ... 其他处理代码 ...
// 显示模板
include(DEDETEMPLATE . '/index.htm');
步骤 2:修改模板文件 index.htm
在 index.htm 的任何位置,使用标签来显示这个变量。
<div class="welcome">
{dede:var name='welcome_info'/}
</div>
这样,当首页被加载时,index.php 中的动态内容就会显示在模板的指定位置。
总结与最佳实践
| 场景 | 推荐方法 | 优点 | 缺点 |
|---|---|---|---|
| 调用网站基本信息 | {dede:global name='xxx'/} |
简单、直接 | - |
| 获取当前文章/栏目信息 | {dede:field name='xxx'/} |
标准化、高效 | - |
| 在列表中循环显示数据 | {dede:list}...{field:xxx/}...{/dede:list} |
逻辑清晰,性能好 | - |
| 简单的条件判断或字符串处理 | {dede:name runphp='yes'}...{/dede:name} |
灵活,在模板内完成 | 代码复杂时影响模板可读性 |
| 复杂的PHP逻辑运算 | 在PHP文件中使用 $dtp->Assign() |
逻辑与视图分离,代码清晰 | 需要修改PHP文件 |
| 绝对不要 | 直接在模板中使用 <?php ... ?> |
破坏模板结构,安全性低,难以维护 | - |
核心原则:
- 优先使用织梦标签:能满足 90% 以上的需求。
- 简单逻辑用
runphp:对于一些简单的计算和判断,在模板里用{dede:name runphp='yes'}处理很方便。 - 复杂逻辑用
Assign:如果涉及到数据库查询、复杂计算等,务必在 PHP 文件中处理好,然后通过Assign传递给模板,这是最专业、最安全的做法。
