- 在模板文件(.htm)中调用新变量:这是最常见的需求,比如你在后台增加了自定义字段,现在想在文章页或列表页显示出来。
- 在PHP代码中动态定义或修改一个变量:这通常需要修改PHP文件,用于一些复杂的逻辑处理。
我将针对这两种最常见的情况,提供详细、分步的教程。

在模板文件中调用或修改新添加的字段变量
这个“新添加的变量”通常指的是你在后台 [核心] -> [内容模型管理] -> [添加模型或修改现有模型] 时,为某个内容模型(如文章、图集等)添加的“自定义字段”。
假设你已经成功添加了一个名为 mytest 的文本自定义字段。
第1步:确认变量名
在模板中调用时,DedeCMS 有固定的命名规则:
- 文章页(article_detail.htm):使用
{dede:field.字段名/} - 列表页(list_xxx.htm, arclist_xxx.htm):使用
{dede:field.字段名/}或{dede:arclist}标签中的function='GetMyField(@me, '字段名')'(旧版更常用)。
重要提示:你的字段名是 mytest,那么在模板中调用的就是 {dede:field.mytest/},请确保大小写完全一致。

第2步:在模板中添加并显示变量
- 登录后台,进入 [模板] -> [模板管理]。
- 找到你需要修改的模板文件,例如文章页模板
article\_detail.htm,点击后面的 [修改]。 - 在模板代码中,找到一个合适的位置(比如标题
{dede:field.title/}下面,或者内容{dede:field.body/}上面),添加你新变量的调用代码。
示例代码:
<h1>{dede:field.title/}</h1>
<div class="info">作者:{dede:field.writer/} 来源:{dede:field.source/} 时间:{dede:field.pubdate function="MyDate('Y-m-d H:i',@me)"/}</div>
<!-- 在这里添加你的新变量 -->
<div class="my-new-field">
<strong>自定义测试字段:</strong>
{dede:field.mytest/}
</div>
<div class="content">
{dede:field.body/}
</div>
- 点击 [保存] 按钮。
第3步:更新缓存并测试
- 更新网站缓存:这是至关重要的一步!如果缓存不更新,模板修改将不会生效。
- 进入后台首页,右上角点击 [系统缓存]。
- 在弹出的页面中,点击 [更新系统缓存]。
- 测试:去前台网站,打开任意一篇已经为
mytest字段填写了内容的文章,检查是否成功显示了你添加的变量和内容。
修改PHP代码中的变量
如果你想在PHP文件里定义或修改一个变量,然后传递给模板使用,或者用于逻辑判断,操作会稍微复杂一些。
示例目标:在文章页显示一个根据栏目ID变化的动态欢迎语
我们想在文章页模板中显示类似“欢迎来到 [栏目名称] 栏目!”的文字。
第1步:找到并修改PHP文件
是由 arc.archives.class.php 这个文件处理和生成的,我们需要修改它来添加我们的新逻辑。

- 找到文件:在你的网站根目录下的
/include/文件夹里,找到arc.archives.class.php文件。 - 修改文件:用代码编辑器(如 VS Code, Sublime Text, Notepad++)打开它。
- 定位代码:按
Ctrl+F搜索function Display(),你会找到文章页的主要显示方法,在这个方法里,有一行关键的代码是$this->ParseTempletsFirst();,这行代码负责解析模板。 - 添加变量:在
$this->ParseTempletsFirst();这行代码之前,添加你的PHP代码来定义新变量。
// 找到大约在第 700 多行的位置(版本不同可能行号不同),在 $this->ParseTempletsFirst(); 之前添加以下代码:
// 获取当前文章的栏目ID
$channelid = $this->ChannelUnit->ChannelInfos['nid']; // 通常获取频道ID
$catid = $this->Fields['typeid']; // 获取当前文章的栏目ID
// 通过栏目ID查询栏目名称
$dsql->SetQuery("SELECT * FROM `#@__arctype` WHERE id = $catid");
$dsql->Execute('hw');
$typename = '';
if($row = $dsql->GetArray('hw'))
{
$typename = $row['typename'];
}
// 将获取到的栏目名称定义为一个模板变量
$this->Fields['welcome_message'] = "欢迎来到 [" . $typename . "] 栏目!";
// ==========================================================
// 下面是原有的代码,不要动
$this->ParseTempletsFirst();
// ==========================================================
代码解释:
$this->Fields['typeid']获取当前文章的栏目ID。- 我们通过
$dsql查询#@__arctype表(栏目表)来获取对应的栏目名称typename。 $this->Fields['welcome_message'] = '...';这是最关键的一步,我们将一个字符串赋值给了Fields数组中的一个新键welcome_message,这样,它就成了一个可以在模板中调用的变量。
第2步:在模板中调用这个新变量
- 再次打开文章页模板
article\_detail.htm。 - 在合适的位置,添加调用这个PHP变量的代码。
<h1>{dede:field.title/}</h1>
<div class="info">作者:{dede:field.writer/} 来源:{dede:field.source/} 时间:{dede:field.pubdate function="MyDate('Y-m-d H:i',@me)"/}</div>
<!-- 在这里添加从PHP传递过来的新变量 -->
<div class="welcome-box">
{dede:field.welcome_message/}
</div>
<div class="content">
{dede:field.body/}
</div>
第3步:更新缓存并测试
- 更新系统缓存:后台首页 -> [系统缓存] -> [更新系统缓存]。
- 测试:去前台,打开不同栏目下的文章,你应该能看到欢迎语中的栏目名称随之变化。
重要注意事项
-
备份!备份!备份! 在修改任何PHP文件(如
arc.archives.class.php)或模板文件之前,请务必备份原始文件,如果修改出错,可以快速恢复。 -
文件权限 确保你的网站目录和文件具有正确的读写权限(通常是 755 或 644),否则你无法保存修改。
-
缓存机制 DedeCMS 有强大的缓存机制,很多时候你修改了代码或模板但看不到效果,都是因为缓存问题,请养成修改后“更新系统缓存”的习惯。
-
PHP代码修改风险 直接修改核心PHP文件有风险,可能会导致网站不稳定,如果你不熟悉PHP,请谨慎操作,或者寻求专业人士的帮助,对于简单的自定义字段,尽量使用场景一的方法。
-
变量命名冲突 在PHP中定义
$this->Fields里的变量时,请尽量避免与系统已有的变量名冲突(如title,body,pubdate等),以免覆盖系统功能。
希望这份详细的教程能帮助你成功修改 DedeCMS 中的新变量!
