首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CakePHP -在没有RequestHandler组件的情况下使用RSS Helper

问CakePHP -在没有RequestHandler组件的情况下使用RSS Helper
EN

Stack Overflow用户
提问于 2010-09-30 23:58:00
回答 3查看 807关注 0票数 0

我已经设置了RSS Helper (使用新闻1.3.4),并且一切正常-我可以通过/ CakePHP /Feed.rss访问我的提要-如http://book.cakephp.org/view/1461/Creating-an-RSS-feed-with-the-RssHelper示例所示

但我希望能够在sudo中有条件地执行此操作,例如:

代码语言:javascript
复制
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吗?我应该使用什么调用/语法?

EN

回答 3

Stack Overflow用户

发布于 2010-10-02 21:16:46

有两种方法可以做到这一点。

基本上,你可以像这样传递一个变量:

代码语言:javascript
复制
http://yourserver.com/news/feed.rss?recent=20

然后在控制器中,您可以使用以下命令访问此变量

代码语言:javascript
复制
$this->params['url']['recent']; //20

或者您可以在Router文件中添加一行,如下所示:

代码语言:javascript
复制
Router::connect('/feed-:recent/*', array('plugin'=>false, 'controller' => 'news', 'action' => 'feed'), array('recent'=>'[0-9]+'));

这样,您的url将如下所示:

代码语言:javascript
复制
http://yourserver.com/news/feed-20.rss

最后,我相信像这样的url也会起作用:

代码语言:javascript
复制
http://yourserver.com/news/feed.rss/recent:20
票数 1
EN

Stack Overflow用户

发布于 2010-10-13 04:04:56

您可以像任何其他控制器调用一样将参数传递给函数。

即

代码语言:javascript
复制
        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个项目。

票数 1
EN

Stack Overflow用户

发布于 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)将其包含为控制器

代码语言:javascript
复制
var $helpers = array('Rss');

2)在您的控制器操作中,您需要指定输出的位置,因此

代码语言:javascript
复制
$this->render('/posts/rss/index','/rss/default');

在本例中,我还在第二个参数中指定了要使用的布局。第一个arg - index.ctp文件的位置是相对于视图/目录的。第二个arg -布局相对于您的views/ layout /目录。

因此,在我的posts_controller中有一个方法,我使用它来识别需要哪个提要(通过传递的var),然后找到帖子并将它们发送到正确的视图和布局:

代码语言:javascript
复制
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'));
    }
}

可能有更好的方法来编写代码-如果是这样,请让我知道。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3832437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档