RSS
RSSを出力するためのヘルパー。
RSSを配信する
RSSを配信するにはXMLヘッダー、チャネル情報(アイテムを含む)を出力します。RSSヘルパーのheader(), items(), channel()の各メソッドを使って出力できます。(header()は親クラスのメソッド)
(RSS2.0についての解説;RSS 2.0 Notes)
RSSとレイアウト
HTML用のレイアウトを使用しないようにするかRSS専用のレイアウトを使用します。
複数のRSSを配信する時は共通のレイアウトを使い、XMLヘッダーの出力などを任せておくと便利です。RSS用のレイアウト(app/view/layouts/rss/default.ctp)が用意されていますのでこれを利用します。レイアウト・ファイルが無ければcake/libs/view/template/layouts/rss/default.ctpからコピーして利用できるようにします。
RSS専用にコントローラーのアクションを用意しても良いのですが、1つのアクションでHTMLとRSSの両方に対応させる事も出来ます。1つのアクションでHTMLとRSSの両方に対応させるにはコントローラでリクエストの種類を判断して、レイアウトとビューを切り替える必要があります。(後述のRequestHandlerコンポーネントを使うと省略できます)
主なメソッド
items ($items, $callback=null)
RSSのitem要素を組み立てます。callback関数を作成してRSSのitem要素のキーに合うように配列をコンバートします。
echo $this->Rss->items($posts, 'transformRSS'); function transformRSS($posts) { return array( 'title' => $posts['Post']['title'], 'link' => array('action' => 'view', $posts['Post']['id']), 'guid' => array('action' => 'view', $posts['Post']['id']), 'description' => $posts['Post']['body'], 'pubDate' => $posts['Post']['created'] ); }
channel ($attrib=array(), $elements=array(), $content=null)
RSSのchannel要素を組み立てます。channelに関する要素を$elementsで、item要素を$contentで指定します。RSS用のレイアウトで使用されています。
ビューやコントローラからsetメソッドで'channel'にchannel要素の内容をセットしておくとRSS用レイアウトで出力してくれます。
$this->set('channel', array ( 'title' => 'POSTS RSS', 'link' => 'http://www.yourdomain.com/', 'description' => 'Posts RSS'));
channel要素のタイトルは$elementsでのtitleを省略しコントローラのpageTitle属性を利用することも出来ます。
$rss->header()
RSS用のレイアウトで使用されています。RSS用のXMLヘッダーを出力します。
RequestHandlerコンポーネントを併用する。
RequestHandlerコンポーネントを併用すると便利です。RequestHandlerコンポーネントはリクエストのタイプを判断し必要なヘルパー(今回はRssヘルパー)を読み込み、レイアウト・パス'rss'に、ビュー・パスを'アクション名/rss'に設定します。RequestHandlerコンポーネントがリクエストのタイプをurlで判断出来るようにRoutesを設定します。
app/config/routes.php
Router::parseExtensions('rss') ;
次のように.rssを付けたURLをRSSを要求するリクエストとして処理できます。
http://www.domain.com/コントローラー名/アクション名.rss
あとは「アクション名/rss」ディレクトリにRss用のビューを用意するだけです。
TIPS
デバック・情報が出力されているとRSSリーダーでRSSと認識されません。ビューやコントローラで出力されないようにする事もできます。
Configure::write('debug', 0);