CakePHPでRSS2.0 feed
CakePHPでRSSフィードをはくのは、ものすごくカンタンです。
今回、当ブログで身をもって体験しましたので、ぜひ。
とはいえ、すでに他のサイトでRSSについては、記事になっています。
(わたしも今回参照しながら対応させていただきました。m(_ _)m)
ぜひ、以下のサイトを参考に設定してみてください。
- RssHelper で RSS フィードを生成する :: RSS :: 主要なヘルパー :: マニュアル :: 1.2 Collection :: The Cookbook
- CakePHP1.2でRSS2.0を出力する[RSS][CakePHP] | Web&MUSICブログ QUALL
- CakePHPのRSSヘルパーの使い方まとめ - 頭ん中
基本的な流れは、上記のサイトの方が詳しいので、そちらを見ていただくとしまして、今回は、Web&MUSICブログ QUALLさんのところで対応していたCDATAについての別解です。
まずは、RSS配信の流れから
ほぼ、上述のサイトそのままですが。
config/routes.phpを編集する
# config/routes.php // 追記 Router::parseExtensions();
controllerでRequestHandlerコンポーネントを読み込む
articles_controller に記事があるとします。
# controllers/articles_controller.php or app_controller.php
// 例
var $components = array('RequestHandler',);
viewにRSS用のviewを作成
レイアウトファイルに標準のものを使用する場合は、viewファイルだけを作ります。
ここで、view内にfunctionを書くのに違和感ある場合は、helperに記入すると良いでしょう。
以下は、そんなケースの例です。
ここではMyHelper (my.php) というのがあるとします。
# views/articles/rss/index.ctp
// 記事一覧が $this->data に入っている場合
echo $rss->items($this->data, array($my, 'rss_transform'));
# views/helpers/my.php
<?php
class MyHelper extends AppHelper {
function rss_transform($item)
{
return array(
'title' => $item['articles']['title'],
'link' => array('action' => 'view', $item['articles']['id']),
'description' => array(
'value' => $item['articles']['body'],
'cdata' => true,
'convertEntities' => false,
),
'pubDate' => ['articles']['posted_date'],
);
}
以上でフィードがはかれます。
デフォルトURLは、 上記の例なら、 /articles/index.rss です。
CDATA対応
上記の description のように配列で記述すると、HTMLタグがそのまま入ります。
HTMLタグをエスケープしたくない場合は、convertEntities を false に、中身をCDATAで囲う場合はcdata を true に、それぞれ設定してください。
というわけで、以上です。
このブログもRSS配信をするために、数時間で対応できました。(現在フィードのテスト中)
上述したブログのおかけで、実際の配信部分は30分程度で完了し、残りはRoutingに苦労したのと、CDATAに対応するために試行錯誤しただけ。
CakePHPさまさまです。