Mostrando entradas con la etiqueta Zend_Feed. Mostrar todas las entradas
Mostrando entradas con la etiqueta Zend_Feed. Mostrar todas las entradas

martes, 24 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.


class Rss_IndexController extends Me_Generic_Controller
{
public function indexAction ()
{
Zend_Loader::loadClass('Zend_Feed');
Zend_feed::importArray(Rss::getArray(), 'atom')->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.



class Rss extends Zend_Db_Table
{
const CANT_NOTICIAS = '20';
const CHARSET = 'utf-8';
public static function getArray ()
{
$noticias = Noticias::getXCantidad(self::CANT_NOTICIAS);
$datos['title'] = 'Portal de noticias';
$datos['link'] = 'http://localhost/diario/rss/';
$datos['lastUpdate'] = Fechas::getMkFromFechaHora(Noticias::getLastDate());
$datos['charset'] = self::CHARSET;
$i = 0;
foreach ($noticias as $noticia) {
$datos['entries'][$i]['title'] = utf8_encode($noticia->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