为Yii Blog添加rss功能

使用了Yii的efeed扩展(地址:http://www.yiiframework.com/extension/efeed/)

把文档中的代码修改下放入view:

<?php
Yii::import('ext.feed.*');
$feed = new EFeed(EFeed::ATOM);
$title=$catalog?Yii::app()->name.' - '.$catalog->Label:Yii::app()->name;
$feed->title = $title;
$link=$catalog?'http://yiiblog.net'.' - '.CHtml::normalizeUrl($catalog->Link):'http://yiiblog.net';
$feed->link =$link;
$feed->addChannelTag('updated', date(DATE_ATOM, time()));
$feed->addChannelTag('author', array('name'=>'Yii'));
foreach ($models as $model) {
    $item = $feed->createNewItem();
    $item->title = $model->title;
    $item->link = 'http://yiiblog.net'.CHtml::normalizeUrl($model->Link);
    $item->date=$model->created_time;
    $item->description=$model->content;
    $feed->addItem($item);
}
$feed->generateFeed();
?>

然后修改model,加入一个feed的namescope:

public function feed($catalog=false){
    $option=array(
        'order'=>'t.id DESC',
        'limit'=>10,
    );
    if ($catalog!=false)
    {
        $option['condition']='catalog=:catalog';
        $option['params']=array(':catalog'=>$catalog);
        $option['limit']=3;
    }
    $this->getDbCriteria()->mergeWith($option);
    return $this;
}

再加入controller,这个很轻:

public function actionFeed($catalog=false)
{
    // renders the view file 'protected/views/site/index.php'
    // using the default layout 'protected/views/layouts/main.php'
    $catalogmodel=$catalog?$this->loadCatalog($catalog):false;
    $this->renderPartial('rss',array(
        'models'=>Post::model()->feed($catalog)->findAll(),
        'catalog'=>$catalogmodel,
    ));
    Yii::app()->end();
}

再在urlmanager里加入记录,方便访问:

'feed'=>'site/feed', 
'feed/<catalog:\d+>'=>'site/feed',

然后就完工了。

现在可以通过http://yiiblog.net/feed来取得全站的rss(atom),也可以通过http://yiiblog.net/feed/数字id的方式来取得分类下的文章的rss(atom)。

发表评论