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デザイナーです。近所のイオンによく行きます。