June 24th, 2008 Category: Zend Framework
4 Comments »

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.

send();        $this->_helper->viewRenderer->setNoRender();    }}?>

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.

titulo);            $datos['entries'][$i]['link'] = 'http://localhost/diario/noticias/?noticia=' . $noticia->id_noticia;            $datos['entries'][$i]['description'] = utf8_encode($noticia->texto_portada);            $datos['entries'][$i]['content'] = utf8_encode($noticia->texto);            $datos['entries'][$i]['lastUpdate'] = Fechas::getMkFromFechaHora($noticia->aud_fecha_hora_ingreso);            ++ $i;        }        return $datos;    }}?>

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


Invitame una Cerverza


Comentar


4 Responses

g05l21 2008-06-24 23:31:00
Hola, genial la explicación y genial el blog. ;-)

Ahora, se me ocurren unos detalles viendo el código.

*Las constantes podrías cambiarlas y meterlas en un posible archivo de configuración. A parte de poder, incluso, darle las posibilidad cambiar el número de noticias al usuario.

*A parte de eso, veo que usas en la clase Rss_IndexController el metodo Load de la clase Zend_Loader, pero en Rss usas el método autoloader. No es malo, ni mucho menos, pero comentaló para no crear confusión ;-)

A parte de los consejos, genial el post (como el resto del blog! xD )

Pablo Morales 2008-06-25 06:26:00
Hola g05121.

Cuando emepeze a escribir la entrada en algun momento dije intermanete "ACORDATE DE ESCRIBIR QUE USAS AUTOLOAD!!!". Mi cerebro olvido de procesarlo. Gracias por aclararlo y estar atento.

Por el lado de las constantes, eso es relativo a cada uno. Seguramente el ideal sea tenerlo en un archivo .ini de configuracion, pero es particular de cada uno.

Saludos.

g05l21 2008-06-25 09:09:00
jejeje...
Tenía toda la pinta de que se te pasó el Autoload, miralo por el lado bueno. Ahora podrás escribir un artículo dedicado, en exclusiva, a él xDD

Pablo Morales 2008-06-25 09:46:00
Buena idea puede ser que le dedique un post ;)