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);

CakePHP Note (v1.3)

Index