Unite al grupo

Grupos de Google
Suscribirte a webandbeer
Correo electrónico:
Consultar este grupo

jueves, 26 de junio de 2008

Utilizando Zend_Feed

Estoy haciendo el desarrollo de un portal de noticias, que dentro de poco voy a liberar una primer version. Hoy me tocaba la tarea de hacer la suscripcion Atom de las noticias del portal para lo cual use Zend_Feed.

Voy a mostrar como quedo mi ejemplo.

En un primer paso arme el controller para el modulo Rss.

1
<?php
2
class Rss_IndexController extends Me_Generic_Controller
3
{
4 public function
indexAction ()
5 {
6
Zend_Loader::loadClass('Zend_Feed');
7
Zend_feed::importArray(Rss::getArray(), 'atom')->send();
8
$this->_helper->viewRenderer->setNoRender();
9 }
10 }
11
?>


Tenemos por ahora solo un metodo index, desde ese index cargamos Zend_Feed con Zend_loader, despues vamos a obtener del modelo Rss un array con el contenido que va a tener nuestro Atom. Para procesar ese Array vamos a usar Zend_Feed::importArray, el cual convierte el array en un xml valido. Lo otro que vamos a hacer es evitar que cargue la vista del modulo.

Por ahora va muy simple. Ahora vamos al modelo.

1
<?php
2
class Rss extends Zend_Db_Table
3
{
4 const
CANT_NOTICIAS = '20';
5 const
CHARSET = 'utf-8';
6 public static function
getArray ()
7 {
8
$noticias = Noticias::getXCantidad(self::CANT_NOTICIAS);
9
$datos['title'] = 'Portal de noticias';
10
$datos['link'] = 'http://localhost/diario/rss/';
11
$datos['lastUpdate'] = Fechas::getMkFromFechaHora(Noticias::getLastDate());
12
$datos['charset'] = self::CHARSET;
13
$i = 0;
14 foreach (
$noticias as $noticia) {
15
$datos['entries'][$i]['title'] = utf8_encode($noticia->titulo);
16
$datos['entries'][$i]['link'] = 'http://localhost/diario/noticias/?noticia=' . $noticia->id_noticia;
17
$datos['entries'][$i]['description'] = utf8_encode($noticia->texto_portada);
18
$datos['entries'][$i]['content'] = utf8_encode($noticia->texto);
19
$datos['entries'][$i]['lastUpdate'] = Fechas::getMkFromFechaHora($noticia->aud_fecha_hora_ingreso);
20 ++
$i;
21 }
22 return
$datos;
23 }
24 }
25
?>




Por ahora tambien va a tener un metodo solo, getArray en la primeras lineas traemos desde el modelo de Noticias las ultimas 20 noticias cargadas y activas. Declaramos un titulo a nuestro feed, que va a ser el titulo del portal de noticias, agregamos el link al feed, la fecha de la ultima actualizacion que va a estar con formato mktime y el charset, en nuestro ejemplo sera utf-8.

Con el objeto con las ultimas veinte noticias, vamos a iterarlos, para conseguir el detalle de cada noticia. Y vamos a completar los datos correspondientes, y por ultimo vamos a devolver el array generado.

Cuando le devolvemos al controller el array, este lo transforma en un Atom valido.

Cuando ejecutamos.

http://www.dominio.com/rss


nos va mostrar el Atom de las ultimas 20 noticias ;)




Pero falta algo, como hacer que desde el home nos aparezca el icono de rss y nos permita agregar en nuestro feed con la url http://www.dominio.com/ como hacemos con cualquier blog.

Muy facil
Dentro del head de nuestro html, agregamos la siguiente linea

1

2 <link rel="alternate" type="application/rss+xml" title="RSS" href="<?php echo $this->baseUrl;?>/rss/" />



en href ponemos la url a nuestro feed.



asi nos quedaria

Facil, no?

Otros links

Syndicate content with Zend Framework Zend_Feed classes

No hay comentarios: