使用 PHP 全局变量(最常用)
这是最直接的方式,适用于在模板中直接使用 PHP 预定义的全局变量,如 $_GET, $_POST, $_SERVER, $GLOBALS 等。

语法:
在 Dede 标签中使用 {dede:global name='变量名'/} 来获取。
示例:
-
获取当前页面的 URL 假设你想在页脚显示当前页面的完整地址。
<footer> <p>当前页面地址: {dede:global name='server.REQUEST_URI'/}</p> </footer>这里的
server.REQUEST_URI对应的是 PHP 的$_SERVER['REQUEST_URI']。
(图片来源网络,侵删) -
获取通过 GET 方式传递的参数 假设你的 URL 是
http://www.yoursite.com/list.php?cid=10&page=2,你想在页面上显示分类 IDcid的值。<p>您正在查看分类ID为: {dede:global name='cid'/} 的内容。</p>这里的
cid对应的是 PHP 的$_GET['cid']。 -
获取网站根目录 这是一个非常实用的例子,用于引用 CSS、JS、图片等静态资源。
<link rel="stylesheet" href="{dede:global name='cfg_cmspath'/}/static/css/style.css">cfg_cmspath是 DedeCMS 内置的全局变量,代表网站的安装根目录。
(图片来源网络,侵删)
使用自定义 PHP 变量(灵活且强大)
当你需要根据业务逻辑计算出一个变量,然后在模板中多处使用时,这种方法非常灵活,这需要在 PHP 文件中定义变量,然后在模板中获取。
步骤:
-
在 PHP 文件中定义变量 通常是在
include或require的 PHP 文件中,或者在index.php等入口文件中,最常见的是在head.htm文件中定义,因为head.htm会被大多数页面模板包含。在
templets/default/head.htm文件顶部添加 PHP 代码:<?php // 定义一个变量,比如当前年份 $current_year = date('Y'); // 将变量注册到 DedeCMS 的全局变量中 $GLOBALS['current_year'] = $current_year; ?> -
在模板标签中调用 使用
{dede:global name='变量名'/}来获取。示例:
继续上面的例子,在
footer.htm中使用这个变量来显示版权年份。<footer> <p>© 2010 - {dede:global name='current_year'/} Your Company Name. All Rights Reserved.</p> </footer>
在循环标签中使用变量(如 {dede:list}, {dede:arclist})
这是最复杂但也最常见的需求,你想把一个 PHP 变量的值传递给 Dede 标签的某个属性,比如获取指定 ID 的文章列表。
核心方法:使用 runphp='yes'
runphp='yes' 属性允许你在标签内部执行 PHP 代码,并将代码的执行结果作为标签的属性值。
语法:
{dede:标签名 属性名='{runphp}php 代码;@me{/runphp}'} ... {/dede:标签名}
关键点:
@me是一个特殊的变量,代表当前标签在循环中的原始值。- 在
runphp代码块中,你需要手动用echo来输出最终要使用的值。 - 如果要将 PHP 变量的值赋给
@me,语法是@me = 你的变量值;。
示例 1:获取指定 ID 的文章列表
假设你有一个变量 $article_ids = '5,10,15',你想显示这些 ID 的文章列表。
-
在 PHP 文件中定义变量 (例如在
index.php或head.htm):$article_ids = '5,10,15'; $GLOBALS['special_ids'] = $article_ids;
-
在模板中使用
runphp:{dede:list titlelen='30' row='5' idlist='{dede:global name='special_ids' runphp='yes'}@me = $GLOBALS['special_ids'];{/dede:global}'} <li> <a href="[field:arcurl/]">[field:title/]</a> <span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span> </li> {/dede:list}解释:
idlist是list标签的一个属性,用于指定文章 ID 列表。- 我们使用
{dede:global name='special_ids' runphp='yes'}来获取我们定义的变量。 - 在
runphp代码块中,@me初始值是global标签获取到的原始值(即字符串'5,10,15')。 @me = $GLOBALS['special_ids'];这行代码确保了我们从全局变量中正确获取并赋值给@me。- 这个
@me的值(即'5,10,15')就被赋给了idlist属性。
示例 2:更复杂的逻辑判断
假设你想根据一个变量 $is_homepage 的值来决定是否显示某个模块。
-
在 PHP 文件中定义变量:
$is_homepage = true; // 或 false $GLOBALS['is_homepage'] = $is_homepage;
-
在模板中使用
runphp进行判断:{dede:global name='is_homepage' runphp='yes'} if(@me == true){ @me = '<div>这是首页才有的内容!</div>'; }else{ @me = ''; // 非首页则不显示任何内容 } {/dede:global} {dede:global.name}解释:
@me初始值是true(布尔值)。if判断成立,@me被重新赋值为一段 HTML 字符串。{dede:global.name}会输出@me的最终值。
总结与最佳实践
| 场景 | 方法 | 语法示例 | 适用情况 |
|---|---|---|---|
| 简单全局变量 | dede:global
| ||
| 自定义变量 | PHP 定义 + dede:global
| ||
| 标签属性传值 | runphp='yes' |
idlist='{dede:global name='ids' runphp='yes'}@me=$GLOBALS['ids'];{/dede:global}' |
将变量值作为 Dede 标签(如 list, arclist, channel)的属性。 |
| 标签内逻辑 | field + function 或 runphp |
[field:typelink function='str_replace("首页","",@me)'/] |
对单个字段内容进行二次处理。 |
重要提示:
- 开启 PHP 支持:要使用
runphp功能,必须确保你的 DedeCMS 系统配置允许,检查后台 系统 -> 系统基本参数 -> 核心设置 中的 模板引擎禁用标签 选项,确保php没有被禁用。 - 安全第一:在使用
runphp时,要警惕 PHP 代码注入的风险,不要让用户输入直接进入runphp代码块中执行,始终对来自外部的数据进行过滤和验证。
通过以上方法,你就可以在 DedeCMS 模板中非常灵活地使用各种变量了。
