CakePHP2.XでRSSフィードを生成してみました
CakePHPこのブログでRSSを配信するに当たり、CakePHP2.XでのRSSの配信方法を調べてみました。
作業的にはCakePHP1.3の時とほとんど同じのようです。
CakePHP2系では、RSS用のレイアウトがあらかじめapp/View/layout/rss/内に用意されているので今までよりさらに一手間減りました。
今回行った作業をまとめてみます。
作り方
まずは.rss拡張子を有効に
routes.phpに1行追加するだけです。
app/Config/routes.php
Router::parseExtensions('rss');
RSSを配信したいコントローラーにRequest Handlerコンポーネントを追加
こちらもやはり1行追加するだけ。
他にも読み込むコンポーネントがあったら一緒に指定してください。
ここでは例としてEntriesControllerというコントローラーを使います。
app/Controller/EntriesController.php
public $components = array('RequestHandler');
RSSヘルパーを読みこまなくていいのかと言われそうですが、
RequestHandlerコンポーネントはリクエストされた拡張子と同じ名前のヘルパーが存在したら自動的にそのヘルパーを読みこんでくれるそうなのでこれだけで大丈夫です。
RSSを配信したいコントローラーに配信用のアクションを作成
今回は、Entryモデルに投稿した記事を新しい順に10件RSSに表示しようと思うので、Entryモデルから最新のデータを10件取り出してビューに渡すアクションを作ります。
アクションの名前はfeedとします。
app/Controller/EntriesController.php
public function feed() {
$this->Entry->recursive = -1;
$this->set('entries', $this->Entry->find('all', array('limit'=>10, 'order'=>'Entry.created desc')));
}
createdは作成日時を格納したカラムです。このカラム名はテーブルによって適宜変更してください。
RSS用レイアウトの作成
app/View/Layouts/rss/ディレクトリの中にdefault.ctpというファイルがあります。
このファイルを同じディレクトリ内に複製し、サイト表示用に使用しているレイアウトと同じ名前にリネームしておきます。
サイト表示用に使用しているレイアウトというのはコントローラー内で
public $layout = 'hogehoge';
と指定しているレイアウトのことです。
この場合、hogehoge.ctpにリネームします。
特に指定せずdefault.ctpを使用してる場合はそのままで大丈夫です。
最後にビュー(feed.ctp)を作ります。
ビューは app/View/Entries/ 直下ではなく、そこにrss というディレクトリを作りその中に入れます。
↓このように記述すると、RSSヘルパーが自動的にRSS用のXMLを吐き出してくれます。
app/View/Entries/rss/feed.ctp
<?php
$channel = array (
'title' => 'サイトの名前', //サイトの名前
'link' => 'http://example.com/', //サイトURL
'guid' => 'http://example.com/', //サイトURL
'description' => 'フィードの説明' //フィードの説明
);
$this->set('channel',$channel);
echo $this->Rss->items($entries, 'transformRSS');
function transformRSS($entries) {
return array(
'title' => $entries['Entry']['name'], //投稿のタイトル
'link' => array('action' => 'view', $entries['Entry']['id']), //投稿の個別ページへのリンク先
'guid' => array('action' => 'view', $entries['Entry']['id']), //投稿の個別ページへのリンク先
'description' => $entries['Entry']['body'], //投稿の本文
'pubDate' => $entries['Entry']['created'] //投稿日時
);
}
?>
コメントが入ってる部分を適宜変更します。
$entries['Entry']['name']などの配列のキーもテーブルのカラム名等によって変更してください。
確認
アクセス方法
feedアクションを表示し、動作を確認しましょう。拡張子に.rssを付けてアクセスします。
例) http://サイトURL/Entries/feed.rss
設置例
この方法で設置した当ブログのRSSはこちら
http://14-00.com/entries/feed.rss
参考サイト
こちらの記事を参考にさせていただきました。