輕輕鬆鬆透過RSS讓使用者訂閱您的網站

第一節

引言

本章要教您如何在CakePHP中使用RSS。 何謂RSS? RSS的英文全名為Really Simple Syndication,是一種透過XML特性所制定的格式。 您可以透過它將網頁內容抽取出來,讀者只要訂閱RSS Feed,便可直接取得有興趣的資訊。

第二節

下載

範例程式: RSS.zip

  1. 把檔案解開至安裝目錄 (請確認 app 放在安裝目錄中,如果沒有,請自行移動)
  2. 開啟phpMyAdmin,執行壓縮檔內的rssposts.sql
  3. 在瀏覽器中輸入 '[address]/RssPosts/rss'
  4. 如果順利,會看到這個結果 => CLICK

第三節

目標

本章將一步步教您如何在CakePHP中使用RSS。我們會做以下幾件事:

  1. 建立測試資料
  2. 建立RssPost model
  3. 建立RssPostsController
  4. 建立rss action
  5. 建立layout檔
  6. 建立產生xml格式資料的view

第四節

建立測試資料

首先,我們要先建立一些資料,以便測試。在RSS.zip中有一個叫rssposts.sql,在phpMyAdmin中執行它。 建立了一個名為rss_posts的資料表,裡頭有id,title,description和modified四個欄位,並放入五筆資料。

建立RssPost model

接下來為它建立屬於他的model。依照CakePHP命名規則,此model需命名為RssPost,檔名則為rss_post.php。 內容很簡單,只定義了model的類別名稱就結束了,如下:

<?php
class RssPost extends AppModel
{
    var $name = 'RssPost'; //類別名稱
}
?>

建立RssPostsController

接著,要為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中將透過它產生時間字串
}
?>

加上rss action

整個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)); //把要訂閱的資料撈出來
}

建立layout檔

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

一切都快完成了,最後一步是把資料整理成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官方網站看看英文資料。


附錄:讀者筆記

修改了一下內容 

Clar說:為了避免初學者使用有問題, 特別再補上測試資料,讓這個範例更完整。