输出 RSS Feed (供稿种子)已经成为许多网站的标准功能,drupal 作为世界上最受欢迎的站点框架“内容管理系统”(CMS)之一,当然也有输出 RSS Feed 的功能。但是 drupal 自带的输出 RSS 功能不太完善,很不方便自定义。如果想自己制作 Feed,比如为某个分类的文章单独发布 RSS,或是为评论生成 Feed,要怎么做呢?我搜了一下,在网上居然没有找到完整介绍的文章,所以我就自己来写一篇如何为 drupal 站点烧制 RSS Feed 的简单教程吧。

一、容易误解的地方

在 drupal 的“模块”(module)设置中,有一个“聚合内容(RSS、RDF 与 Atom feeds)”(aggregator)。一般人很容易以为这个就是负责生成 RSS 的模块。我开始也是这么想的。摸索了半天才发现,这个 aggregator 并不是输出 RSS 的模块。恰恰相反,它其实是一个阅读器。开启了 aggregator 模块之后,就可以订阅其他站点的 RSS Feed,并以自定义的形式显示在自己的 drupal 站点上。所以,如果你想做混烧网站(mashup),利用别人站点的内容搭自己的网站,倒可以试试 aggregator 模块。

二、drupal 自带的 RSS

drupal 默认生成的 RSS 地址是 http://mysite.com/?q=rss.xml 。如果开启了简洁链接(clean URL),就是 http://mysite.com/rss.xml 。理论上说,这个 RSS 的内容就是站点首页的内容,但是实践上它可能并不是你首页的实际内容。如果你自制了一个页面并设定为首页,该页的内容并不会反映在该 RSS 中。这个 RSS 的实际内容是什么呢?可以说是 drupal 默认首页的内容,也就是你在发表文章时选择了“推荐到首页”(Promoted to front page)的那些文章。显然,这个 RSS 设置、修改、维护起来非常麻烦,这种简陋的功能不能满足我们自定义 RSS 的需求。

更新:如果仅仅是想为某个分类输出 RSS,drupal 默认就有。比如分类的 URL 是 http://example.com/taxonomy/term/7/0/ 的话,其 Feed 地址就是 http://example.com/taxonomy/term/7/0/feed 。如果需要更多的自定义设置,请用下面的方法。

三、为 drupal 制作自定义 RSS

自定义 RSS 需要用到 drupal 的 views 模块(非常强大的模块,关于如何安装 drupal module 的教程请 google,这里不赘述)。下面以 views 2.x 版本为例,讲一下如何为某个分类的文章生成单独的 RSS,为其他文章输出 RSS 的办法都可以依此类推。如果之前你已经用过 views,创建好了页面,请直接跳到第(四)小步

(一)

安装、开启好 views 之后,在“站点创建”(site building)中进入 views 设置页面。

11

点 add 新增一个 view。

12

名字、描述等根据自己的情况填写,view type 选择 node,然后点击 next 进入详细设置页面。

13

(二)

views 的详细设置页面选项非常多,乍看起来令人眼花缭乱,不知所措。不过别着急,这里面的大部分设置我们都不用管。

首先选择要在 RSS 中包含哪些文章。点击 filter (过滤器)旁边的加号,添加一个过滤器。

14

下面会列出非常多的条件,我们就用这些条件筛选出需要包括在 RSS 中的内容。这些条件是可以多选的,它们之间是“与”的关系,也就是说,只有同时满足这些条件的文章才会包括进来。

我们希望为某个分类的文章输出 RSS,所以这里我们选择 taxonomy: term (分类:术语)作为条件。实际上,这里的条件非常丰富,我们可以选择自己所需的条件,精确地筛选出要展示的文章,比如某个作者的文章、某个时间发表的文章等。

 17

点 add 确定之后,还会根据该网站所设置的分类列出一些选项。dropdown 方式是它列出所有的分类让你选择,autocomplete 方式是你自己输入分类的名称,按需求选择即可。然后点 update 确定。

 18

然后就可以选择分类了。如果有的文章同时属于多个分类的话,就会重复出现,为了避免重复,可以勾选 reduce duplicates 选项,不过重复文章太多的话可能会影响效率的哦。

112 

需要注意的是,最好再添加一个过滤器,勾选上 Node: published (节点:已发表)。因为我们只希望 Feed 中包括已经发表的文章,不想让草稿或隐藏的文章也出现在 RSS 中。

 15

在published 前面打勾,点 update 确定。

 16

(三)

下面是设置在 RSS 中每个节点(node)显示哪些字段,一般就是标题和正文(或摘要)。点击 fields(字段)旁边的加号。

19

勾选上 node: title (节点:标题)和node: body (节点:正文),如果只想输出摘要的话就勾选 node: teaser (节点:摘要),点 add 确定。

110

下面会提示对这些字段作进一步的设置。

label 是在该字段前面显示的字段名字,比如每篇文章的标题前面都会显示“标题”两个字,一般来说很少有网站会这么做,所以我们把这个框留空,里面本来的字删掉。

exclude from display 是说最后结果里不显示这个字段,但不显示我还费这个劲干吗?所以这项别勾选。

link this field to its node 是给标题加上链接,链向原文所在页面。这个很有用,最好选上。

点 update 按钮确定。

111

这时我们会看到页面下方已经可以预览结果了。

(四)

这是制作 RSS 种子最关键的一步,或者说,从现在开始,我们才真正开始设置 RSS 本身。在左上角的下拉选单中选择 Feed,然后点击下面的 add display 按钮。

113

这个 Feed 现在还没有 URL 地址,我们来设置地址。点击 path 旁边的 none。

114

在文本框中输入地址。URL 中最好包含 RSS 或 Feed 的字样,这样别人和自己都能一目了然地看出这是 RSS Feed,不是一般的页面。

115

这时我的 drupal 会提示缺少一个插件,但只要点击 missing style plugin,一路点下去,就一切完好了。

116

117

118

(五)

最后的关键一步,一定要点击 save 保存!不然前面所有的心血就全部付之东流啦。

忙了这么半天,早就迫不及待地想看看最后成果了吧?打开阅读器,把刚才设置的 URL 输入进去,是不是看到辛苦制作的 RSS Feed 完美呈现出来了?

如果以上的你已经可以全部掌握,那么就试着摆弄 views 里的其他选项吧,它们可以让你对显示结果有更精细的控制。比如 title 是 Feed 的标题,items to display 是 Feed 包含的文章数目,sort criteria 是文章排列顺序等,基本上都是比较一目了然的,试一下就知道怎么用了。

 四、感想

drupal 是个优秀的框架,但其原生的输出 RSS 功能比较弱。views 是个强大的模块,但是它太强大了,可配置的选项太多,让新人有点无所适从。Wordpress 在这方面做的倒是比较好,默认就为几乎一切输出了 RSS,比如每个分类、每篇文章都有自己的 RSS,无需任何配置,虽然可定制性没有 views 那么强,但用起来很方便,很傻瓜化。当然,drupal 和 WordPress 的定位都不同,有各种差异都很正常,两者都是很受欢迎的程序,我可没有在说谁优谁劣哦。