2010年08月07日

cakephp1.3 でRSSを作成

お願いします♪いいねとかつぶやいたりして下さい
 
さらにエレガントに振り分け。

rssなら強制的に default 使えよと。

app_controller.php
function beforeFilter()
	{	
		header("Content-Type: text/html; charset=UTF-8");

		if($this->RequestHandler->accepts('rss')){
			Configure::write('debug', 0);
		} else {
			if (substr($this->params['url']['url'], -1) != '/') {
				$this->redirect(FULL_BASE_URL.DS.$uri.DS, 301);
				exit;
			}
		}
	
	}
	
	
	function beforeRender()
	{
		if($this->RequestHandler->accepts('rss')){
			$this->layout = 'default';
		}
	}


追記
最後に スラッシュで終わらせる設定にしている場合は注意。
app_controller.php
if (isset($this->params['url']['url'])) {
			
            $uri = $this->params['url']['url'];
			
			//rss表示モードじゃない場合
			$flag_rss = strpos($uri,'.rss');
			if (substr($uri, -1) != '/' && $flag_rss == false ) {
				$this->redirect(FULL_BASE_URL.DS.$uri.DS, 301);
				exit;
			}
			
			//rss表示モードの場合 debug0に
			if($flag_rss != ''){
				Configure::write('debug', 0);
			}
			
        }



追記
ビューでrssへのリンクを生成するには
<?
$rssurl = substr($_SERVER['REQUEST_URI'], 0, (strlen($_SERVER['REQUEST_URI'])-1));
?>
<a href="<?=$rssurl;?>.rss">RSS</a>


とすればいい。

ブログに必須と思われるRSSの吐き出し。
どうすればいいのかな?と血眼になって探した。

探した。

探した。。。

で、できたのでまとめておきます。

/nikkis/all/ (全ての日記を最新順で読み込む) の RSSをはき出したい場合。



routes.php
Router::parseExtensions('rss');


を追加。

RSS用のレイアウト、コントローラー、ビューを作る必要があるので作る。

・レイアウト
/app/views/layouts/rss/default.ctp
<?
echo $rss->header();
$channel = $rss->channel(array(), $channelData, $items);
echo $rss->document(array(), $channel);
?>


何が書いてあるか意味わからんでしょ。
おまじないみたいなもの。僕にもわかりません。
なので理解する必要なし。

・コントローラー
/app/controllers/nikkis_controller.php
function all()
{
    $channelData = array('title' => 'ひでぶろぐ',
                    'link' => 'http://www.hideblog.net',
                    'url' => 'http://www.hideblog.net',
                    'description' => 'Web開発者必見の超絶セクシーサイト。'
                    );
    $posts = $this->{$this->modelClass}->find('all',array('order' => 'id desc'));
    
    $this->set(compact('channelData', 'posts'));
}


このとき、コントローラーに var $components = array('RequestHandler'); も追加しておこう!



・ビュー
/app/views/nikkis/rss/all.ctp
<?
function rss_transform($item)
{
return array('title' => $item['Nikki']['title'],
			'link' => array('url' => '/nikkis/show/'.$item['Nikki']['id'].'/'),
			'guid' => array('url' => '/nikkis/show/'.$item['Nikki']['id'].'/'),
			'description' => strip_tags($item['Nikki']['body']),
			'pubDate' => $item['Nikki']['created'],				
			);
}

$this->set('items', $rss->items($posts, 'rss_transform'));
?>


で、ここまでできたらあとは・・・

http://www.hideblog.net/nikkis/all.rss



でアクセスすれば自動的にRSSが発信されている!
以上。今日も勉強になりました。
関連するタグ: PHP cakephp
あなたにとって有用な記事でしたか?是非ブックマークしておくことをおすすめします。
 




ライブラリを配布しちゃったり
webデザイン
Fireworks
HTMLコーディング
CSS
Dreamweaver
携帯サイト
webプログラム
PHP
正規表現
cakephp
MYSQL
javascript
webマーケティング
adwords
analytics
windows7
ショートカットキー
おすすめ情報
サイト
facebook
ライブラリ
配布
アプリ
iphone
ipad
サーバー
さくらサーバー
全ての記事を読む




トップ - 最新の記事一覧 - お問い合わせ