我已经设置了RSS帮助程序(使用CakePHP 1.3.4)并且一切正常 - 我可以通过/news/feed.rss访问我的提要 - 例如http://book.cakephp.org/view/1461/Creating-an-RSS-feed-with-the-RssHelper
但我希望能够在sudo中有条件地做到这一点,例如:
if (!empty($var)) {
switch ($var) {
case one :
$xml = $this->method->find('$var conditions...');
... use RSS Helper to serve results as XML.
case two :
$xml = $this->method->find('other $var conditions...');
... use RSS Helper to serve results as XML.
}
}
在这种情况下我可以使用RSS帮助程序吗?我使用什么调用/语法?
答案 0 :(得分:1)
有两种方法可以做到这一点。
基本上你可以传递这样的变量:
http://yourserver.com/news/feed.rss?recent=20
然后在控制器中,您可以使用
访问此变量$this->params['url']['recent']; //20
或者您可以在路由器文件中添加一行,如下所示:
Router::connect('/feed-:recent/*', array('plugin'=>false, 'controller' => 'news', 'action' => 'feed'), array('recent'=>'[0-9]+'));
这样你的网址就会像:
http://yourserver.com/news/feed-20.rss
最后我相信像这样的网址也会起作用:
http://yourserver.com/news/feed.rss/recent:20
答案 1 :(得分:1)
您可以将params传递给与任何其他控制器调用相同的函数。
IE
public function rss( $limit = 20, $topic = null ){
if( !$topic ){
$xml = $this->Article->find( 'all', array( 'limit' => $limit ));
...
} else {
$xml = $this->Article->find( 'all', array( 'limit' => $limit, 'conditions' => array( 'Article.topic' => $topic )));
}
...
}
}
?>
然后您可以使用:http://domain/articles/rss.rss
访问RSS订阅源如果您需要传递参数:http://domain/articles/rss/100.rss(获取所有100个结果)
或者像这样:http://domain/articles/rss/10/obama.rss(使用“obama”主题获取所有内容并返回10个项目。
答案 2 :(得分:0)
RequestHandler允许您使用类似/posts/index.rss的URL,它会自动加载RSS Helper并将输出发送到/views/posts/rss/index.ctp,并使用/ views / layouts /中的布局RSS / default.thtml中。
但是如果你想自己使用RSS Helper,你需要:
1)包含控制器
var $helpers = array('Rss');
2)在您的控制器操作中,您需要指定输出的位置,所以
$this->render('/posts/rss/index','/rss/default');
在这种情况下,我还指定了在第二个参数中使用的布局。第一个arg - index.ctp文件位置是相对于您的views /目录的。第二个arg - 布局与您的views / layouts /目录相关。
所以我在posts_controller中有一个方法,用于识别需要哪个Feed(通过传递的var),然后找到帖子并将它们发送到正确的视图和布局:
function rss(){
if (!empty($this->params['pass'])){
$ops=array(
'conditions'=>'where feedname_id=' . $this->params['pass'][0],
'order' => 'Post.created DESC',
'limit' => 10
);
$this->set('posts', $this->Post->find('all',$ops));
$this->render('/posts/rss/index','/rss/default');
} else {
$this->redirect(array('controller'=>'feednames','action'=>'index'));
}
}
可能有更好的方法来编码 - 如果是这样,请告诉我。