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