使用 {dede:php} 标签(最常用、最推荐)
这是DedeCMS官方提供的、在模板中直接执行PHP代码的最标准方法,它非常适合执行一些简单的逻辑、调用函数或获取变量。

基本语法
直接在模板文件(.htm)中使用 {dede:php}...{/dede:php} 标签包裹你的PHP代码。
示例 1:直接执行PHP代码
{dede:php}
$current_time = date('Y-m-d H:i:s');
echo "当前时间是: " . $current_time;
{/dede:php}
输出结果:
当前时间是: 2025-10-27 10:30:00
调用DedeCMS系统函数
这是 {dede:php} 最强大的功能之一,你可以轻松调用DedeCMS的全局函数,如获取栏目信息、文章内容等。

示例 2:获取指定ID的栏目名称
假设你有一个栏目ID是 5,想在首页显示它的名称。
{dede:php}
// 引入DedeCMS的全局函数库
require_once(DEDEINC.'/typelink.class.php');
// 实例化栏目链接类
$typeLink = new TypeLink();
// 获取栏目ID为5的信息
$typeInfo = $typeLink->getTypeInfo(5);
// 输出栏目名称
echo $typeInfo['typename'];
{/dede:php}
示例 3:获取当前文章的内容
这个通常用在文章详情页(article_article.htm)。
{dede:php}
// 在文章页,$arcID 是全局变量,代表当前文章ID
$aid = $arcID;
// 引入文章类
require_once(DEDEINC.'/arc.archives.class.php');
// 实例化
$arc = new Archives($aid);
// 获取文章内容
$body = $arc->GetBody();
// 输出内容(这里为了演示,只输出前200个字符)
echo mb_substr(strip_tags($body), 0, 200, 'utf-8') . '...';
{/dede:php}
注意:
{dede:php}标签中的代码是在DedeCMS框架内执行的,所以可以直接使用DedeCMS的全局变量(如$arcID)和函数。- 安全性:从DedeCMS 5.7版本开始,默认情况下
{dede:php}标签在列表页和首页是被禁用的,只有在文章页、栏目页页才默认开启,这是为了防止恶意代码在首页执行,你可以在后台的“系统” -> “系统基本参数” -> “其他选项”中找到“禁用PHP全局标签”选项来设置。
使用 include 语句(引入外部PHP文件)
如果你的PHP代码比较复杂,或者想在多个模板中复用,最好的方式是将代码写在一个独立的PHP文件中,然后在模板中 include 它。

创建独立的PHP文件
在网站根目录下创建一个文件夹,include_php,然后在里面创建一个文件,my_functions.php。
/include_php/my_functions.php 文件内容:
<?php
// 如果直接访问此文件,则无权限,增加安全性
if (!defined('DEDEINC')) {
exit('Request Error!');
}
function getSpecialCategoryName($id) {
// 引入DedeCMS的全局函数库
require_once(DEDEINC.'/typelink.class.php');
$typeLink = new TypeLink();
$typeInfo = $typeLink->getTypeInfo($id);
return $typeInfo['typename'];
}
?>
重要提示:在DedeCMS的PHP文件中,第一行最好加上
if (!defined('DEDEINC')) exit('...');来防止该文件被直接通过浏览器访问,提高安全性。
在模板中引入
你可以在任何模板文件中使用 include 来引入这个文件,并调用其中的函数。
示例 4:在首页引入并调用
{dede:php}
// 引入我们创建的PHP文件
// 路径是相对于网站根目录的
include_once('/include_php/my_functions.php');
// 调用函数
$cat_name = getSpecialCategoryName(8);
echo "特殊栏目ID为8的名称是: " . $cat_name;
{/dede:php}
使用自定义模板标签(最专业、最灵活)
这是最专业、最推荐用于复杂项目的方法,它将PHP逻辑封装成一个自定义的DedeCMS标签,使模板和业务逻辑完全分离,代码更清晰、更易于维护。
创建自定义标签函数文件
在 /include/taglib/ 目录下创建一个新文件,my.lib.php。
/include/taglib/my.lib.php 文件内容:
<?php
if (!defined('DEDEINC')) exit('Request Error!');
function lib_mytag(&$ctag, &$refObj)
{
// 获取标签属性,{dede:mytag aid='10'/},这里会得到 $att['aid'] = '10'
$att = $ctag->CAttribute->Items;
$aid = isset($att['aid']) ? $att['aid'] : 0;
// 初始化返回值
$revalue = '';
// 如果aid不为空,则执行逻辑
if ($aid > 0) {
// 引入文章类
require_once(DEDEINC.'/arc.archives.class.php');
$arc = new Archives($aid);
$revalue = $arc->GetTitle(); // 获取文章标题
}
// 返回结果
return $revalue;
}
?>
这个文件定义了一个名为 mytag 的标签,它接收一个 aid 属性,并返回对应ID的文章标题。
在模板中使用自定义标签
你可以在模板中像使用DedeCMS自带标签一样使用你自定义的标签。
示例 5:使用自定义标签
<h3>获取ID为15的文章标题:</h3>
{dede:mytag aid='15'/}
<h3>获取ID为20的文章标题:</h3>
{dede:mytag aid='20'/}
输出结果会根据你数据库中ID为15和20的文章标题而定。
总结与对比
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
{dede:php} |
简单直接,无需额外文件,可快速调用DedeCMS函数。 | 代码和模板混合,不易维护;在首页等位置可能被禁用;存在安全风险。 | 简单的逻辑判断、变量输出、调用DedeCMS函数。 |
include |
代码分离,复用性强;逻辑清晰,易于管理。 | 需要创建和维护额外的PHP文件;模板中仍需写PHP代码。 | 复杂的业务逻辑、需要在多个页面复用的功能模块。 |
| 自定义标签 | 最佳实践;完全分离模板和逻辑;标签化使用,非常规范;性能最好。 | 开发最复杂,需要创建函数文件并注册标签。 | 大型项目、功能模块、需要长期维护和团队协作的项目。 |
给新手的建议:
- 如果只是想在模板里执行一两句简单的PHP代码,或者调用一个DedeCMS函数,用
{dede:php}就足够了。 - 如果你的代码比较长,或者想在好几个地方用,把它放到一个单独的
.php文件里,然后用include引入。 - 如果你正在开发一个功能复杂的网站,或者想让你的代码非常专业、易于维护,请花时间学习并使用 自定义标签,这是最规范、最强大的方式。
