使用 {dede:php} 标签(最常用、最推荐)

这是DedeCMS官方提供的、在模板中直接执行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的全局函数,如获取栏目信息、文章内容等。

dedecms 模板引用php文件
(图片来源网络,侵删)

示例 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 它。

dedecms 模板引用php文件
(图片来源网络,侵删)

创建独立的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 引入。
  • 如果你正在开发一个功能复杂的网站,或者想让你的代码非常专业、易于维护,请花时间学习并使用 自定义标签,这是最规范、最强大的方式。