14時の間食

CakePHPの記事を中心にWeb制作について

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

参考サイト

こちらの記事を参考にさせていただきました。

カテゴリー

最近の記事

Author

  • ささきち-このブログを書いてる人
    s3make@ささきち
    多摩川沿いに住むフリーのWebデザイナーです。近所のイオンによく行きます。