下面我将为你提供最常用、最稳定的方法,并附上详细的步骤和解释。

核心原理
DedeCMS 的 RSS 输出功能是由一个专门的文件 rss.php 控制的,这个文件会读取数据库中的文章数据,并按照 XML 格式生成 RSS 订阅源,默认情况下,它调用的是文章的摘要(description 字段),我们的目标就是修改这个文件,让它调用文章的正文(body 字段)。
直接修改 rss.php 文件(最常用、最推荐)
这是最直接、最常用的方法,适用于大多数 DedeCMS 5.7 及之前的版本。
步骤 1:定位并编辑 rss.php 文件
在你的网站根目录下,找到 rss.php 文件,用代码编辑器(如 Dreamweaver、VS Code、Notepad++ 等)打开它。
步骤 2:找到并修改核心代码
在 rss.php 文件中,找到生成 RSS description 标签的代码段,通常是这样的:

// 找到类似下面这样的代码块,大约在第 60-80 行左右
while($row = $dsql->GetArray("me"))
{
$row['description'] = cn_substr($row['description'], 200);
$isUrl = trim($row['redirecturl']);
if($isUrl != '')
{
$row['link'] = $isUrl;
}
else
{
$row['link'] = $cfg_basehost.$row['arctitle'];
}
// 这里是生成 item 的地方
$rssfeed .= "
<item>".$row['title']."</title>
<link>".$row['link']."</link>
<category>".$row['typename']."</category>
<author>".$row['adminname']."</author>
<pubDate>".date('r', $row['pubdate'])."</pubDate>
<guid>".$row['link']."</guid>
<description><![CDATA[".$row['description']."]]></description>
</item>";
}
关键点:
$row['description']:这里使用的是文章的摘要字段。cn_substr($row['description'], 200):这里还对摘要进行了截取,只取前 200 个字符。
步骤 3:将摘要替换为全文
我们将 $row['description'] 替换为 $row['body'],并移除摘要的截取操作,因为正文内容我们希望它是完整的。
修改后的代码如下:
// 修改 while 循环内的代码
while($dsql->GetArray("me"))
{
// $isUrl 的处理逻辑保持不变
$isUrl = trim($row['redirecturl']);
if($isUrl != '')
{
$row['link'] = $isUrl;
}
else
{
$row['link'] = $cfg_basehost.$row['arcurl']; // 注意:这里推荐使用 $row['arcurl'],它更规范
}
// 生成 item 的地方 - 核心修改在这里
$rssfeed .= "
<item>".htmlspecialchars($row['title'])."</title>
<link>".$row['link']."</link>
<category>".$row['typename']."</category>
<author>".$row['adminname']."</author>
<pubDate>".date('r', $row['pubdate'])."</pubDate>
<guid>".$row['link']."</guid>
<description><![CDATA[".$row['body']."]]></description> <!-- 关键修改:将 description 改为 body -->
</item>";
}
修改说明:

$row['description']->$row['body']:这是最核心的一步,告诉 RSS 输出器使用文章的正文(body字段)作为description的内容。cn_substr(...)已被移除:因为我们希望输出全文,所以不再需要对内容进行截断。$row['arctitle']->$row['arcurl']:这是一个小优化。$row['arctitle']可能是标题的拼音或英文,而$row['arcurl']才是文章的真实链接,这样更规范。htmlspecialchars():虽然CDATA可以处理大部分 HTML 标签,但给标题加上htmlspecialchars()是一个更安全的做法,可以防止特殊字符导致 RSS 解析错误。
步骤 4:保存文件并测试
- 保存修改后的
rss.php文件。 - 访问你的 RSS 地址,通常是
http://你的域名.com/rss.php。 - 使用浏览器或 RSS 阅读器(如 Feedly)查看,你会发现,每篇文章的
description部分现在显示的是完整的文章内容,而不是摘要了。
使用自定义函数(更灵活)
如果你的网站结构比较复杂,或者你希望未来能更灵活地控制 RSS 输出内容,可以使用自定义函数的方法。
步骤 1:创建自定义函数文件
在 /include/ 目录下创建一个新文件,命名为 myfunctions.php。
步骤 2:在函数文件中添加全文输出函数
打开 myfunctions.php,添加以下 PHP 函数:
// 文件:/include/myfunctions.php
if(!defined('DEDEINC')) exit('Request Error!');
/**
* 获取文章全文用于RSS输出
* @param string $body 文章正文
* @return string
*/
function GetRssFullText($body) {
// 这里可以添加一些处理逻辑,比如移除不需要的标签等
// 移除 <script> 标签
$body = preg_replace('/<script.*?>.*?<\/script>/si', '', $body);
// 返回处理后的全文
return $body;
}
步骤 3:引入函数文件并修改 rss.php
-
打开
rss.php文件,在文件顶部(require_once(dirname(__FILE__)."/include/config_base.php");这行之后)添加引入语句:// 在 rss.php 顶部添加 require_once(dirname(__FILE__)."/include/myfunctions.php");
-
然后修改
while循环中的代码,调用我们刚刚创建的函数:// 在 rss.php 的 while 循环内修改 while($dsql->GetArray("me")) { $isUrl = trim($row['redirecturl']); if($isUrl != '') { $row['link'] = $isUrl; } else { $row['link'] = $cfg_basehost.$row['arcurl']; } // 调用自定义函数获取全文 $fullText = GetRssFullText($row['body']); $rssfeed .= " <item> <title>".htmlspecialchars($row['title'])."</title> <link>".$row['link']."</link> <category>".$row['typename']."</category> <author>".$row['adminname']."</author> <pubDate>".date('r', $row['pubdate'])."</pubDate> <guid>".$row['link']."</guid> <description><![CDATA[".$fullText."]]></description> </item>"; }
这种方法的好处是逻辑分离,rss.php 文件更干净,并且你可以轻松地在 myfunctions.php 中扩展更多内容处理逻辑。
重要注意事项
- 性能影响:输出全文 RSS 会显著增加服务器的负载和数据传输量,如果你的文章数量非常多或者文章非常长,可能会影响 RSS 生成速度和带宽消耗,对于大型网站,可以考虑只输出最近一段时间(如最近一个月)的文章全文。
- HTML 标签:文章正文(
body)中通常包含大量的 HTML 标签(<p>,<img>,<h1>等),RSS 的description字段支持 HTML,所以大部分阅读器都能正确显示,但一些极简的阅读器可能会忽略 HTML,只显示纯文本,这是正常现象。 - 备份:在修改任何核心文件(如
rss.php)之前,请务必备份原文件,以防修改出错时可以快速恢复。 - 缓存:DedeCMS 本身有缓存机制,修改后如果看不到效果,可以尝试清空一下网站缓存(在后台的“系统” -> “SQL命令工具” -> “一键更新网站缓存”)。
对于绝大多数用户来说,方法一已经足够解决问题,也是最简单直接的方式,直接修改 rss.php 文件,将 $row['description'] 替换为 $row['body'] 即可。
希望这个详细的教程能帮助你成功实现 DedeCMS 的 RSS 全文输出功能!
