dede如何修改新添加的变量?

99ANYc3cd6
预计阅读时长 15 分钟
位置: 首页 DEDE建站 正文
  1. 在模板文件(.htm)中调用新变量:这是最常见的需求,比如你在后台增加了自定义字段,现在想在文章页或列表页显示出来。
  2. 在PHP代码中动态定义或修改一个变量:这通常需要修改PHP文件,用于一些复杂的逻辑处理。

我将针对这两种最常见的情况,提供详细、分步的教程。

dede 修改新添加的变量
(图片来源网络,侵删)

在模板文件中调用或修改新添加的字段变量

这个“新添加的变量”通常指的是你在后台 [核心] -> [内容模型管理] -> [添加模型或修改现有模型] 时,为某个内容模型(如文章、图集等)添加的“自定义字段”。

假设你已经成功添加了一个名为 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/},请确保大小写完全一致。

dede 修改新添加的变量
(图片来源网络,侵删)

第2步:在模板中添加并显示变量

  1. 登录后台,进入 [模板] -> [模板管理]
  2. 找到你需要修改的模板文件,例如文章页模板 article\_detail.htm,点击后面的 [修改]
  3. 在模板代码中,找到一个合适的位置(比如标题 {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>
  1. 点击 [保存] 按钮。

第3步:更新缓存并测试

  1. 更新网站缓存:这是至关重要的一步!如果缓存不更新,模板修改将不会生效。
    • 进入后台首页,右上角点击 [系统缓存]
    • 在弹出的页面中,点击 [更新系统缓存]
  2. 测试:去前台网站,打开任意一篇已经mytest 字段填写了内容的文章,检查是否成功显示了你添加的变量和内容。

修改PHP代码中的变量

如果你想在PHP文件里定义或修改一个变量,然后传递给模板使用,或者用于逻辑判断,操作会稍微复杂一些。

示例目标:在文章页显示一个根据栏目ID变化的动态欢迎语

我们想在文章页模板中显示类似“欢迎来到 [栏目名称] 栏目!”的文字。

第1步:找到并修改PHP文件

是由 arc.archives.class.php 这个文件处理和生成的,我们需要修改它来添加我们的新逻辑。

dede 修改新添加的变量
(图片来源网络,侵删)
  1. 找到文件:在你的网站根目录下的 /include/ 文件夹里,找到 arc.archives.class.php 文件。
  2. 修改文件:用代码编辑器(如 VS Code, Sublime Text, Notepad++)打开它。
  3. 定位代码:按 Ctrl+F 搜索 function Display(),你会找到文章页的主要显示方法,在这个方法里,有一行关键的代码是 $this->ParseTempletsFirst();,这行代码负责解析模板。
  4. 添加变量:在 $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步:在模板中调用这个新变量

  1. 再次打开文章页模板 article\_detail.htm
  2. 在合适的位置,添加调用这个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步:更新缓存并测试

  1. 更新系统缓存:后台首页 -> [系统缓存] -> [更新系统缓存]
  2. 测试:去前台,打开不同栏目下的文章,你应该能看到欢迎语中的栏目名称随之变化。

重要注意事项

  1. 备份!备份!备份! 在修改任何PHP文件(如 arc.archives.class.php)或模板文件之前,请务必备份原始文件,如果修改出错,可以快速恢复。

  2. 文件权限 确保你的网站目录和文件具有正确的读写权限(通常是 755 或 644),否则你无法保存修改。

  3. 缓存机制 DedeCMS 有强大的缓存机制,很多时候你修改了代码或模板但看不到效果,都是因为缓存问题,请养成修改后“更新系统缓存”的习惯。

  4. PHP代码修改风险 直接修改核心PHP文件有风险,可能会导致网站不稳定,如果你不熟悉PHP,请谨慎操作,或者寻求专业人士的帮助,对于简单的自定义字段,尽量使用场景一的方法。

  5. 变量命名冲突 在PHP中定义 $this->Fields 里的变量时,请尽量避免与系统已有的变量名冲突(如 title, body, pubdate 等),以免覆盖系统功能。

希望这份详细的教程能帮助你成功修改 DedeCMS 中的新变量!

-- 展开阅读全文 --
头像
dede文章点击数据存哪表?字段名是click还是count?
« 上一篇 02-12
C语言如何替换字符串中的特定子串?
下一篇 » 02-12

相关文章

取消
微信二维码
支付宝二维码

目录[+]