DedeCMS 的模板系统是一个基于 XML 和标签的语言,它允许你在不接触复杂 PHP 代码的情况下构建网站,为了实现更灵活、更复杂的功能,它也巧妙地集成了 PHP 的执行能力。

(图片来源网络,侵删)
理解 DedeCMS 模板中的 PHP,主要分为三个层面:
- 安全模式:通过内置的
{dede:php}标签执行。 - 原生模式:直接在模板文件中写 PHP 代码(不推荐,但有特定用途)。
- 模板文件自身:
.php文件作为模板被调用。
安全模式:使用 {dede:php} 标签(推荐)
这是 DedeCMS 官方提供且最安全的在模板中执行 PHP 代码的方式,它被设计用来执行一些简单的逻辑、数据处理或调用外部函数。
基本语法
{dede:php}
// 在这里写你的 PHP 代码
// 定义一个变量
$myVar = 'Hello from Dede PHP!';
// 使用 DedeCMS 的内置函数
$arc = GetOneArchive(10); // 获取 ID 为 10 的文章数据
if($arc) {
echo $arc['title'];
}
{/dede:php}
特点与限制
- 安全性:DedeCMS 后台有一个“模板安全开关”(
系统->系统基本参数->核心设置->模板引擎禁用标签),默认情况下,php标签是被允许的,但管理员可以通过禁用php来关闭此功能,防止恶意代码执行。 - 作用域:在
{dede:php}块内定义的变量,默认情况下不能被模板的其他部分(如{dede:field.title/})直接使用,它是一个独立的执行环境。 - 输出:直接使用
echo或print来输出内容到页面上。 - 适用场景:
- 进行一些数学计算。
- 调用 DedeCMS 的 API 函数(如
GetOneArchive,GetOneType等)。 - 处理简单的条件逻辑并输出结果。
示例:获取指定栏目信息并输出
假设你想在首页某个位置显示“关于我们”栏目的描述。
- 在后台找到“关于我们”栏目的 ID(ID=5)。
- 在模板文件中,使用以下代码:
<div class="about-desc">
{dede:php}
// 获取栏目ID为5的栏目信息
$typeInfo = GetOneType(5);
if($typeInfo) {
// 输出栏目描述
echo $typeInfo['description'];
}
{/dede:php}
</div>
原生模式:直接嵌入 PHP 代码(不推荐,有风险)
这种方式是在模板文件(.htm)中直接写 <?php ... ?> 代码块。

(图片来源网络,侵删)
示例
<div>
<?php
$time = time();
echo "当前服务器时间是: " . date('Y-m-d H:i:s', $time);
?>
</div>
为什么不推荐?
- 严重的安全风险:这是最大的问题,如果网站存在上传漏洞,攻击者可以上传一个恶意的
.htm文件,里面包含直接执行的 PHP 代码,这会导致服务器被完全控制,DedeCMS 的安全开关无法禁止这种原生 PHP 的执行。 - 破坏模板结构:这使得模板文件变得混乱,难以维护,违背了“逻辑与表现分离”的原则。
- 升级困难:官方模板升级时,你的这些原生 PHP 代码很容易被覆盖。
除非你有特殊需求且对服务器安全有绝对的控制权,否则请务必避免使用这种方式。
模板文件自身作为 PHP 文件调用
这是一种更高级的用法,通常用于创建一个独立的页面,比如一个自定义的表单提交页面、一个复杂的会员中心页面等。
原理
你创建一个 .php 文件,但这个文件的内容和写法遵循 DedeCMS 的模板规范,你通过 DedeCMS 的文章或页面管理功能,将这个 PHP 文件“发布”为一个页面,用户就可以通过 URL 访问它。
操作步骤
-
创建 PHP 模板文件 在
templets/你的模板目录/下创建一个文件,my_page.php。<?php /** * 模板变量赋值区域,从 DedeCMS 接收数据 * 这部分代码是必须的,用于接收系统传递过来的变量 */ if (!defined('DEDEINC')) exit('Request Error!'); require_once(DEDEINC.'/arc.partview.class.php'); // --- 在这里可以编写你的 PHP 业务逻辑 --- // 处理表单提交 if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['submit'])) { $name = trim($_POST['name']); $email = trim($_POST['email']); // 这里可以进行数据验证、存入数据库等操作 // 为了演示,我们只简单输出 echo "<h3>提交成功!</h3>"; echo "姓名: " . htmlspecialchars($name) . "<br>"; echo "邮箱: " . htmlspecialchars($email); // 为了不继续显示下面的表单,我们可以 exit 或直接 return // exit; } // --- 模板文件内容开始 --- ?> <!DOCTYPE html> <html> <head> <title>我的自定义页面</title> </head> <body> <h1>这是一个自定义 PHP 页面</h1> <?php // 在这里也可以嵌入 PHP 代码来动态生成内容 echo "<p>当前页面加载时间: " . date('Y-m-d H:i:s') . "</p>"; ?> <hr> <h2>联系我们</h2> <form action="/my_page.php" method="post"> <p>姓名: <input type="text" name="name" required></p> <p>邮箱: <input type="email" name="email" required></p> <p><input type="submit" name="submit" value="提交"></p> </form> </body> </html> -
在后台创建页面并关联
- 登录 DedeCMS 后台,进入
核心->内容发布->添加普通文档。 - 选择栏目:选择一个“频道模型”为“单页文档”的栏目。
- :填写页面标题,我的自定义页面”。
- 来源:选择“选择自定义页面”。
- 选择页面:在下拉菜单中,选择你刚刚创建的
my_page.php文件。 - 生成 HTML:勾选“生成 HTML”。
- 提交并生成。
- 登录 DedeCMS 后台,进入
-
访问页面 根据你设置的栏目和文档 ID,生成对应的 URL,
http://你的域名/plus/view.php?aid=123,访问这个 URL,就会执行my_page.php文件中的代码并显示其内容。
适用场景
- 自定义表单:创建复杂的、需要后端处理的表单。
- 会员中心:构建功能丰富的会员个人页面。
- API 接口页面:创建一个简单的、输出 JSON 或 XML 数据的接口。
总结与最佳实践
| 方法 | 语法 | 安全性 | 推荐度 | 主要用途 |
|---|---|---|---|---|
| 安全模式 | {dede:php} ... {/dede:php} |
高(可后台控制) | ⭐⭐⭐⭐⭐ | 模板内的简单逻辑、数据处理、调用 API。 |
| 原生模式 | <?php ... ?> |
低(无法后台控制) | ⭐☆☆☆☆ | 不推荐,仅在绝对必要时使用。 |
| 模板文件 | 创建 .php 文件作为模板 |
中(依赖文件权限) | ⭐⭐⭐⭐ | 创建独立的、功能复杂的页面。 |
核心建议:
- 优先使用
{dede:php}:这是最安全、最符合 DedeCMS 设计哲学的方式。 - 绝对避免直接
<?php ?>:除非你 100% 确定你的网站没有上传漏洞,并且你愿意承担由此带来的风险。 - 善用
.php模板文件:当你需要创建一个逻辑远超普通模板的独立页面时,这是最规范、最强大的方法。 - 熟悉 DedeCMS API:很多时候,你想要实现的功能可能已经有现成的 DedeCMS 函数(如
GetOneArchive,GetOneType,GetChannelUrls等),先去查阅文档,这比自己用 PHP 实现要简单和安全得多。
