Sindicando categorías
Cambiando un poco la función que genera los archivos de sindicación podía resolver el problema así que me decidí a generalizarla más para poder extender su uso a la categoría 'bsd' o cualquier otra. Al final la función ha quedado tal que así:
/** * Crea un archivo de sindicación dependiendo de la cláusula WHERE * pasada por parámetro. * * @param $page_object: Descriptor de la conexión a la base de datos. * @param $where_clause: Cláusula de condición dentro del SQL. * @param $file_rss: Nombre del archivo a crear. */ function create_rss_where($page_object, $where_clause, $file_rss) { // Variables include("config.inc.php"); $surl=$page_object->get_options("siteurl"); // URL de la web $bname=$page_object->get_options("blogname"); // Nombre de la web $bdesc=$page_object->get_options("blogdescription"); // Pequeña descripción $btheme=$page_object->get_options("blogtheme"); // Theme RSS de la web $admail=$page_object->get_options("admin_email"); // Email del administrador $archivo=$rss_rcms.$file_rss; // Seleccionamos la última noticia para quedarnos con la última fecha de modificación $sql="SELECT *, date_format(date_created, '%a, %d %b %Y %T') as fecham FROM rcms_posts WHERE $where_clause ORDER BY id DESC"; $data=$page_object->get_data($sql); $fecha_mod=$data[0][fecham]; // Seleccionamos las noticias que queremos sindicar para generar el código xml $sql="SELECT * FROM rcms_posts WHERE $where_clause ORDER BY date_created DESC LIMIT 0,15"; $data=$page_object->get_data($sql); $len = count ($data); // Generamos el contenido xml del archivo $codigo= '<?xml version="1.0" encoding="iso-8859-1"?> <rss version="2.0"> <channel> <title>'.$bname[option_value].'</title> <link>'.$surl[option_value].'</link> <description>'.$bdesc[option_value].'</description> <pubDate>'.$fecha_mod.' +0000</pubDate> <language>es-ES</language> <managingEditor>'.$admail[option_value].'</managingEditor> <image> <url>'.$surl[option_value].'themes/'.$btheme[option_value].'/images/feed.png</url> <title>'.$bname[option_value].'</title> <link>'.$surl[option_value].'</link> </image> '; $sql="SELECT *, date_format(date_created, '%a, %d %b %Y %T') as fecha FROM rcms_posts WHERE $where_clause ORDER BY date_created DESC LIMIT 0,15"; $data=$page_object->get_data($sql); $len = count ($data); for($i=0;$i<$len;$i++) { // Dejamos pasar solamente estos tags HTML // Resumen del post $resumen=strip_tags($data[$i][content], '<a></a><a ><a><p></p><div></div><br /><br><br/><pre></pre><blockquote></blockquote><img>'); // Prescindimos del html. // Resto del post $resumen2=strip_tags($data[$i][content_more], '<a></a><a ><a><p></p><div></div><br /><br><br/><pre></pre><blockquote></blockquote><img>'); // Prescindimos del html. // Calcula categorías $arr_keywords=""; $categ=""; // Tags ó palabras clave del post $arr_keywords=explode(" ", $data[$i][keywords]); $len_arr=count($arr_keywords); if($len_arr > 0) { for($k=1;$k<$len_arr; $k++) $categ .= "<category>{$arr_keywords[$k]}</category>"; } else $categ=""; $sql_categoria="SELECT * FROM rcms_posts_categories WHERE id='".$data[$i][idcategory]."'"; $data_categoria=$page_object->get_data($sql_categoria); $categoria=$data_categoria[0][title]; // Seleccionamos usuario $sql_user="SELECT * FROM rcms_users WHERE id='".$data[$i][iduser]."'"; $data_user=$page_object->get_data($sql_user); $user=$data_user[0][nickname]; // Miramos el enlace del post $link_new=$this->check_rewrite($page_object, "noticia",$data[$i][id]); $codigo.='<item> <title>'.$data[$i][title].'</title> <link>'.$surl[option_value].$link_new.'</link> <guid>'.$surl[option_value].$link_new.'</guid> <category>'.$categoria.'</category> '.$categ.' <description>'.$resumen.'</description> <pubDate>'.$data[$i][fecha].' +0200</pubDate> </item> '; }; $codigo .='</channel> </rss> '; // Actualizamos el archivo con el nuevo valor $fp = fopen($archivo,"w+"); fwrite($fp, $codigo); fclose($fp); }Espero que, adaptando las variables que he resaltado en negrita y algún que otro posible bug, el código sea reutilizable a todas aquellas personas que se han preguntado cómo implementar un rss a nivel de categorías en su blog. Dudas, mociones o censuras en los comentarios.
Comentarios
Gracias, enviare aki a los que me lo han preguntado.
Co, saludos
Me gusta ver los Blogs y las Webs al vieja usanza, que es como se ven bien los diseños, que hay muchas webs que lo merecen.