CakePHPでRSSを出力してみる
2013/05/24
相変わらずCakePHPは1.3の話ですが、調べましたところ、2系統でも同じっぽいです(未確認)。
- URLは http://your-domain.com/products/productrss.rss とした場合にRSSが表示される
- 詳細ページのURLは http://your-domain.com/products/detail/*** ***はIDとする
を前提とします。
単純な形で出すとして、ステップとしては5つです。
STEP1、Router に parseExtensions を追加する
app/config/routes.php に次の1行を記述。
1 |
Router::parseExtensions('rss'); |
STEP2、対象コントローラーのコンポーネントに RequestHandler を組み込む
対象コントローラ、今回の場合だと(products_controller)で、下記を記述。
1 |
var $components = array('RequestHandler'); |
STEP3、RSS用のレイアウトファイルを設置
コア側のレイアウトファイル /cake/libs/views/layouts/rss/default.css を、/app/views/layouts/rss にコピー。
内容はそのままで構いません。
STEP4、RSS用のアクションを作成
前提に則って、/app/controllers/products_controller.php に、productrss アクションを作成。
ここでは単に最新10件を取得して表示するだけとします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
function productrss() { $products = $this->Product->find( 'all', array( 'conditions' => null, 'fields' => null, 'order' => array('Product.id' => 'DESC'), 'recursive' => -1, 'limit' => 10, ) ); $this->set('products', $products); } |
STEP5、RSS用のビューを作成
内容は以下のような感じで。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
$this->set('channel', array( 'title' => 'マイストア 商品RSS', 'link' => 'http://your-domain.com', 'description' => 'マイストア公式ウェブサイト。商品用RSSです。', )); echo $rss->items($products, 'transformRSS'); function transformRSS( $products ) { return array( 'title' => $products['Product']['name'], 'link' => array('action' => 'showdetail', $products['Product']['id']), 'guid' => array('action' => 'showdetail', $products['Product']['id']), 'description' => $products['Product']['list_comment'], 'dc:creator' => '管理者@マイストア', 'pubDate' => $products['Product']['modified'], ); } |
拡張子を .rss とはせずに、通常のビューファイルと同じ .ctp で、設置先を、/app/views/products/rss/ とするところがミソ。
ファイル名は当然アクションと同じなので、 productrss.ctp とします。
以上で作成は完了。
http://your-domain.com/products/productrss.rss にアクセスすれば RSS が作成されているはずです。
注意
/app/config/core.php のデバッグ設定ですが、通常作成時などは
1 |
Configure::write('debug', 2); |
のようにし、デバッグしながらだと思いますが、RSS配信時は 0 にしておかないと、RSSに余計なものが混ざり、きちんと生成できません。
開発時でも RSS 作成テスト時は 0 にしておきましょう。
本番環境は無論、0 です。
以上、CakePHP1.3 でお手軽に RSS配信する場合の手順でした。
[tgAmazonItemLookup asin="4774153249" related="1"]
[tgAmazonItemLookup asin="B005JHKT3M" related="1"]