CakePHP - Использование помощника RSS без компонента RequestHandler - PullRequest
0 голосов
/ 30 сентября 2010

Я установил Помощник 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 в этом случае?Какие звонки / синтаксис я использую?

Ответы [ 3 ]

1 голос
/ 13 октября 2010

Вы можете передавать параметры в функцию так же, как и любой другой вызов контроллера.

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 )));
            }
            ...
        }
    }
?>

Затем вы можете получить доступ к каналу rss с помощью: http://domain/articles/rss.rss

Есливам нужно передать параметры: http://domain/articles/rss/100.rss (получить все с 100 результатами)

Или вот так: http://domain/articles/rss/10/obama.rss (получить все с темой "Обама" и вернуть 10 элементов.

1 голос
/ 02 октября 2010

Это можно сделать двумя способами.

Обычно вы можете передать переменную, например, такую:

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]+'));

Таким образом ваш URL будет выглядеть так:

http://yourserver.com/news/feed-20.rss

и, наконец, я считаю, что URLкак это будет работать, а также:

http://yourserver.com/news/feed.rss/recent:20
0 голосов
/ 02 октября 2010

RequestHandler позволяет вам использовать URL-адрес, такой как /posts/index.rss, автоматически загружает помощник RSS и отправляет вывод в /views/posts/rss/index.ctp и использует макет в / views / layouts / Новости / default.ctp.

Но если вы хотите использовать RSS Helper самостоятельно, вам необходимо:

1) включи контроллер

var $helpers = array('Rss');

2) в действии вашего контроллера необходимо указать, куда выводится вывод, поэтому

$this->render('/posts/rss/index','/rss/default');

В этом случае я также указал, какой макет использовать во втором аргументе. Первый аргумент - расположение файла index.ctp относительно вашей директории views /. Второй аргумент - компоновка относится к вашей директории views / layouts /.

Итак, у меня есть метод в моем posts_controller, который я использую, чтобы определить, какой канал нужен (через переданную переменную), а затем находит сообщения и отправляет их в правильные представления и макеты:

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'));
    }
}

Возможно, есть лучшие способы закодировать это - если так, пожалуйста, дайте мне знать.

...