我已经设置了RSS Helper (使用新闻1.3.4),并且一切正常-我可以通过/ CakePHP /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 Helper吗?我应该使用什么调用/语法?
发布于 2010-10-02 21:16:46
有两种方法可以做到这一点。
基本上,你可以像这样传递一个变量:
http://yourserver.com/news/feed.rss?recent=20然后在控制器中,您可以使用以下命令访问此变量
$this->params['url']['recent']; //20或者您可以在Router文件中添加一行,如下所示:
Router::connect('/feed-:recent/*', array('plugin'=>false, 'controller' => 'news', 'action' => 'feed'), array('recent'=>'[0-9]+'));这样,您的url将如下所示:
http://yourserver.com/news/feed-20.rss最后,我相信像这样的url也会起作用:
http://yourserver.com/news/feed.rss/recent:20发布于 2010-10-13 04:04:56
您可以像任何其他控制器调用一样将参数传递给函数。
即
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 )));
}
...
}
}
?>然后,您可以使用以下命令访问rss提要:http://domain/articles/rss.rss
如果需要传递参数:http://domain/articles/rss/100.rss (fetch all with 100 results)
或者像这样:http://domain/articles/rss/10/obama.rss (以“奥巴马”为主题获取所有内容,并返回10个项目。
发布于 2010-10-02 21:40:27
RequestHandler允许使用像/posts/index.rss这样的url,它会自动加载RSS Helper并将输出发送到/views/posts/rss/index.ctp,并使用/views/ layout /rss/default.ctp上的布局。
但是,如果您想单独使用RSS Helper,则需要:
1)将其包含为控制器
var $helpers = array('Rss');2)在您的控制器操作中,您需要指定输出的位置,因此
$this->render('/posts/rss/index','/rss/default');在本例中,我还在第二个参数中指定了要使用的布局。第一个arg - index.ctp文件的位置是相对于视图/目录的。第二个arg -布局相对于您的views/ layout /目录。
因此,在我的posts_controller中有一个方法,我使用它来识别需要哪个提要(通过传递的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'));
}
}可能有更好的方法来编写代码-如果是这样,请让我知道。
https://stackoverflow.com/questions/3832437
复制相似问题