Sindicación de noticias

Hoy vamos a explicar cómo hacer en CakePHP 1.2 un canal de sindicación de noticias o sindicación web. Es una funcionalidad que utilizamos con mucha frecuencia en nuestros diseños web y para la que Cake nos ofrece un buen soporte.

Cake nos proporciona un helper, RSSHelper, que nos permite hacer en muy pocas líneas de código un RSS.

Lo primero que tenemos que hacer es una función en el controlador o bien utilizar la misma función index del controlador que queramos sindicar:

PHP:
  1. class NoticiasController extends AppController
  2. {
  3. var $helpers = array('Rss', 'Xml');
  4. var $components = array('RequestHandler');
  5.  
  6. function index()
  7. {
  8. if ($this->RequestHandler->prefers('rss'))
  9. {
  10. $this->layout = 'default';
  11. $this->set('channel',array(
  12. 'title' => 'Portal web - Noticias',
  13. 'description' => 'Sindicación de noticias de nuestro portal web',
  14. 'link' => 'http://url_al_portal.com'));
  15. $this->set('data', $this->Noticia->findAll(null, null, array('Noticia.fecha DESC'), 10));
  16. }
  17. else
  18. {
  19. // Si no es un RSS, ponemos aquí cómo queremos que se comporte el index
  20. $this->redirect("otra_funcion");
  21. }
  22. }
  23. }

Vemos que tuvimos que importar algunos helpers y componentes. Establecemos aquí ya el título, descripción y enlace del canal, y los datos que queremos sindicar.

En la capa de la vista, tenemos que definir el layout default.ctp, que estará en la carpeta views/layout/rss y será de una manera tan simple como la siguiente:

PHP:
  1. <?php
  2. echo $content_for_layout;
  3. ?>

Y también definir la vista en si, que estará en nuestro caso en la carpeta views/noticias/rss y se llamará index.ctp, y que tendrá la forma:

PHP:
  1. function convertirRSS($data)
  2. {
  3. return array(
  4. 'title' => $data['Noticia']['titulo'],
  5. 'link'  => array('action' => 'ver', $data['Noticia']['url'], $data['Noticia']['id']),
  6. 'description' => $data['Noticia']['texto'],
  7. 'pubDate' => $data['Noticia']['fecha']
  8. );
  9. }
  10. echo $xml->header(array('version'=>'1.0', 'encoding'=>'utf-8'));
  11. $document = $rss->channel(array(), $channel, $rss->items($data, 'convertirRSS'));
  12. echo $rss->document(array('version'=>'2.0'), $document);
  13. ?>

Ya por último, lo único que tenemos que hacer es meter en la cabecera de nuestro código html, el link, para que nos ponga en la barra del navegador el enlace a nuestro rss:

PHP:
  1. <link rel="alternate" type="application/rss+xml" title="Nuestro portal web RSS Feed" href="/noticias/index.rss" />

Y, como vemos, esta url no sigue el formato estándar de las urls que utiliza Cake, por lo que tenemos que definir en el archivo config/routes.php una regla para ello:

PHP:
  1. Router::parseExtensions();

Con esto ya tendríamos definido el RSS para nuestra aplicación.

Deja una respuesta

[ bbPress synchronization by bobrik ]