引言
本章要教您如何在CakePHP中使用RSS。 何謂RSS? RSS的英文全名為Really Simple Syndication,是一種透過XML特性所制定的格式。 您可以透過它將網頁內容抽取出來,讀者只要訂閱RSS Feed,便可直接取得有興趣的資訊。
本章要教您如何在CakePHP中使用RSS。 何謂RSS? RSS的英文全名為Really Simple Syndication,是一種透過XML特性所制定的格式。 您可以透過它將網頁內容抽取出來,讀者只要訂閱RSS Feed,便可直接取得有興趣的資訊。
範例程式: RSS.zip
本章將一步步教您如何在CakePHP中使用RSS。我們會做以下幾件事:
首先,我們要先建立一些資料,以便測試。在RSS.zip中有一個叫rssposts.sql,在phpMyAdmin中執行它。 建立了一個名為rss_posts的資料表,裡頭有id,title,description和modified四個欄位,並放入五筆資料。
接下來為它建立屬於他的model。依照CakePHP命名規則,此model需命名為RssPost,檔名則為rss_post.php。 內容很簡單,只定義了model的類別名稱就結束了,如下:
<?php
class RssPost extends AppModel
{
var $name = 'RssPost'; //類別名稱
}
?>
接著,要為RssPost model建立controller。 依CakePHP命名規則,controller必須是model名的複數,所以命名為RssPostsController。 檔名則是rss_posts_controller.php,相關的view會放在/views/rss_posts/目錄內。 由於RSS會使用到time helper,所以我們得在controller內將引用它。 controller的內容如下:
<?php
class RssPostsController extends AppController
{
var $name = 'RssPosts'; //類別名稱
var $helpers = array('Time'); //在此引用Time ehlp,之後view中將透過它產生時間字串
}
?>
整個controller的核心就在此涵式。 它會將要讓讀者訂閱的資料撈出來,放在posts陣列中,以供後續建立XML格式資料。 在此值得注意的地方是我們不使用預設的layout,而指定使用xml.thtml為layout。 一般來說,預設的layout是用於顯示於畫面上,所以我們改用xml.html,用別的格式傳回結果。 xml.thtml的內容等會兒會仔細說明。 呼叫此功能的URL將是'http://[address]/RssPosts/rss'。 程式碼如下:
function rss()
{
$this->layout = 'xml'; //指定使用xml.thtml為layout
$this->set('posts', $this->Post->findAll('','','modified DESC',10)); //把要訂閱的資料撈出來
}
rss action並不使用預設顯示的layout,而是另外定義了一個xml.html layout。 新的layout會在header中將Content-type指定為text/xml,讓瀏覽器了解這是個xml格式的檔案。 接者做所有layout都必須做的事:echo $content_for_layout;。 檔案內容如下:
<?php header('Content-type: text/xml'); ?>
<?php echo $content_for_layout; ?>
一切都快完成了,最後一步是把資料整理成XML的格式,這個動作當然就是在view裡做了。 view的內容就是依 rss 2.0 的規定將該訂的標籤訂好,想放的內容好,一個蘿菠一個坑,再簡單不過。 程式碼如下:
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
<title>RSS Test</title>
<link>http://www.ursite.org/</link>
<description>RSS Test</description>
<pubDate><?php echo $time->toRSS(date("D, j M Y H:i:s"));?></pubDate>
<docs>http://www.ursite.org/posts/rss</docs>
<generator>ursite</generator>
<managingEditor>editor@ursite.org</managingEditor>
<webMaster>webmaster@ursite.org</webMaster>
<?php foreach ($posts as $post){ ?>
<item>
<title><?php echo $post['RssPost']['title']; ?></title>
<link>http://www.ursite.org/<?php echo $post['RssPost']['id']; ?>.html</link>
<description><?php echo $post['RssPost']['description']; ?></description>
<pubDate><?php echo $time->toRSS($post['RssPost']['modified']); ?></pubDate>
<guid>http://www.ursite.org/posts/<?php echo $post['RssPost']['id']; ?></guid>
</item>
<?php } ?>
</channel>
</rss>
最最最最最後一步,就是讓人最興奮也最害怕的一步:測試! 試著在瀏覽器中輸入'[address]/RssPosts/rss'。恭喜成功!
恭喜您成功的在CakePHP中加入RSS功能,使您的網站讀者可以訂閱網站內容。 在CakePHP中加入一個功能就是這麼容易。 這只是個開始,想學更多可到 CakePHP手冊(繁體中文)仔細看看中文操作手冊。 也可到CakePHP官方網站看看英文資料。