dede rss全文输出如何实现?

99ANYc3cd6
预计阅读时长 21 分钟
位置: 首页 DEDE建站 正文

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

dede rss 全文输出
(图片来源网络,侵删)

核心原理

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 标签的代码段,通常是这样的:

dede rss 全文输出
(图片来源网络,侵删)
// 找到类似下面这样的代码块,大约在第 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>";
}

修改说明:

dede rss 全文输出
(图片来源网络,侵删)
  1. $row['description'] -> $row['body']:这是最核心的一步,告诉 RSS 输出器使用文章的正文(body 字段)作为 description 的内容。
  2. cn_substr(...) 已被移除:因为我们希望输出全文,所以不再需要对内容进行截断。
  3. $row['arctitle'] -> $row['arcurl']:这是一个小优化。$row['arctitle'] 可能是标题的拼音或英文,而 $row['arcurl'] 才是文章的真实链接,这样更规范。
  4. htmlspecialchars():虽然 CDATA 可以处理大部分 HTML 标签,但给标题加上 htmlspecialchars() 是一个更安全的做法,可以防止特殊字符导致 RSS 解析错误。

步骤 4:保存文件并测试

  1. 保存修改后的 rss.php 文件。
  2. 访问你的 RSS 地址,通常是 http://你的域名.com/rss.php
  3. 使用浏览器或 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

  1. 打开 rss.php 文件,在文件顶部(require_once(dirname(__FILE__)."/include/config_base.php"); 这行之后)添加引入语句:

    // 在 rss.php 顶部添加
    require_once(dirname(__FILE__)."/include/myfunctions.php");
  2. 然后修改 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 中扩展更多内容处理逻辑。


重要注意事项

  1. 性能影响:输出全文 RSS 会显著增加服务器的负载和数据传输量,如果你的文章数量非常多或者文章非常长,可能会影响 RSS 生成速度和带宽消耗,对于大型网站,可以考虑只输出最近一段时间(如最近一个月)的文章全文。
  2. HTML 标签:文章正文(body)中通常包含大量的 HTML 标签(<p>, <img>, <h1> 等),RSS 的 description 字段支持 HTML,所以大部分阅读器都能正确显示,但一些极简的阅读器可能会忽略 HTML,只显示纯文本,这是正常现象。
  3. 备份:在修改任何核心文件(如 rss.php)之前,请务必备份原文件,以防修改出错时可以快速恢复。
  4. 缓存:DedeCMS 本身有缓存机制,修改后如果看不到效果,可以尝试清空一下网站缓存(在后台的“系统” -> “SQL命令工具” -> “一键更新网站缓存”)。

对于绝大多数用户来说,方法一已经足够解决问题,也是最简单直接的方式,直接修改 rss.php 文件,将 $row['description'] 替换为 $row['body'] 即可。

希望这个详细的教程能帮助你成功实现 DedeCMS 的 RSS 全文输出功能!

-- 展开阅读全文 --
头像
织梦系统开发小程序可行吗?
« 上一篇 今天
C语言如何求两个数的最小公倍数?
下一篇 » 今天

相关文章

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

目录[+]