Gerando feeds rss com sfFeed2Plugin

Vou mostrar nesse post uma maneira que utilizo para gerar RSS de notícias publicadas.

Primeiramente, precisamos ter instalado o plugin “sfFeed2Plugin”:http://trac.symfony-project.org/wiki/sfFeed2Plugin

symfony plugin-install http://plugins.symfony-project.com/sfFeed2Plugin

Considere um *schema.yml* parecido com esse

propel:
  artigo:
    _attributes: { Artigo }
    id:
    titulo:     varchar(200)
    data:      date
    resumo:    varchar(200)
    texto:     longvarchar
    …
 

Estou usando também uma rota para os links de noticias. O *apps/APLICACAO/config/routings.yml* precisa ser configurado para isso. Essa rota será utilizada no link para o artigo.

noticiaver:
  url: /noticia/:id
  param: { module: noticias , action: ver }
 

Dentro do módulo *noticias*, vamos adicionar no *apps/APLICACAO/modules/noticias/actions/actions.class.php*

public function executeRss() {
      $feed = new sfAtom1Feed();

      $feed->initialize(array(
        ‘title’       => ‘RSS – Notícias’,
        ‘link’        => ‘http://www.link-do-titulo-do-rss.com.br/’
      ));

      // selecionando os artigos de 5 em 5
      $c = new Criteria;
      $c->addDescendingOrderByColumn(ArtigoPeer::DATA);
      $c->setLimit(5);
      $artigos = ArtigoPeer::doSelect($c);

      foreach ($artigos as $artigo)
      {
        $item = new sfFeedItem();
        $item->initialize(array(
          ‘title’       => $artigo->getTitulo(),
          ‘link’        => ‘@noticiaver?id=’.$artigo->getId(),        
          ‘pubDate’     => $artigo->getData("U"),
          ‘uniqueId’    => $artigo->getId(),
          ‘description’ => $artigo->getResumo(),
        ));

        $feed->addItem($item);
      }
      $this->feed = $feed;
      $this->setLayout(false);
  }
 

No template *apps/APLICACAO/modules/noticias/templates/rssSuccess.php* precisamos ter somente

<?php
decorate_with(false);
echo $feed->asXml();
 

Pronto. Você terá o RSS das notícias em um endereço parecido com esse, *www.seusite.com.br/noticias/rss*.