相変わらず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 とします。
以上で作成は完了。
注意
/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″]

 
         
         
         
         
         
         
         
         
         
         
         
         
         
         
  
  
  
  
