Joomla!: título y descripción en Syndication RSS Feeds
Pequeña introducción a las RSS
Hoy me he quedado un poco sorprendido al usar el módulo Syndication RSS Feeds que en español viene con el nombre Sindicación del sitio. Dicho módulo tiene algunas pequeñas limitaciones y hoy vamos a indagar un poco en su código para mejorar el título y la descripción que nos crea por defecto en el archivo final XML.
Really Simple Syndication (RSS) es un formato XML para compartir contenido en la web, de este modo, los usuarios que se subscriben a tu contenido y mediante programas específicos, pueden acceder a las últimas novedades sin necesidad de un navegador y de visitar tu página. Hoy vamos a centrarnos en el título y en la descripción que el módulo Syndication RSS Feeds nos crea.
Como ya comenté en un tutorial anterior, el módulo Syndication RSS Feeds no funciona correctamente en Joomla! 1.7.0. En dicho enlace pongo un parche que a mi me funciona correctamente. Respecto a este módulo para sindicar contenido pues después de probarlo en Joomla! 1.7.0, he descubierto tres pequeños problemas:
- La descripción del archivo xml final es siempre la misma y se corresponde con la descripción de tus metadatos en la página principal.
- El título corresponde al menú. Si tienes un menú que enlaza a una categoría o a archivos destacados, ese será el título de tu archivo xml. Ahora veremos cómo lo podemos modificar fácilmente desde Joomla!. También existe otro problema que seguidamente veremos.
- El problema es que el módulo RSS puede no aparecer en las categorías padre y aparecer solamente en las categorías hija que contengan artículos. Esto con Joomla! 1.5 no pasaba ya que el módulo RSS aparecía en la Sección, englobaba a todas sus categorías y podías subcribirte a la Sección solamente.
Soluciones al título y a la descripción
El título que aparece en el archivo RSS XML final, se corresponde con el menú al que has enlazado la categoría o los archivos destacados. Si quieres modificar el título del RSS puedes ir al Gestor de menú -> entrar en el menú e item correspondiente y en las opciones de la derecha, ve a Opciones de visionado de la página y ahí puedes poner el título que quieras:
Esto conlleva también, lógicamente, que será modificado el título de la página donde te lleve el ítem del menú.
El error que he visto que se produce en Joomla! 1.7.0 es que si tienes un menú que enlaza a una categoría "padre" y dentro de esta existen varias categorías "hija", sólo se va a mostrar el título de la categoría "padre". Esto es un error que se puede solucionar desde Joomla! creando submenús...yo no lo he hecho así ni recomiendo si no es tu intención. Por otro lado, la descripción es siempre la misma: la descripción de los metadatos de tu página principal que es lo que configuras en Configuración global -> Configuración de los metadatos.
El código fuente
Intenté buscar soluciones a estos dos errores y no encontré ninguna desde Joomla! así que tocó examinar el código fuente. Del mismo modo que tenemos distintos modos de vista: categoría, artículo, pdf pues también tenemos un modo de vista Feed que es con la que vamos a trabajar. Estos dos archivos los encontrarás en: tu_sitio/components/com_content/views... ahí dependiendo de la "vista": category o featured (sólo aparecen en estas vistas) pues tendremos un archivo u otro. Voy a ir como ejemplo a category: tu_sitio/components/com_content/views/category y ahí verás dos archivos importantes:
- view_html.php
- view.feed.php
El archivo view.feed.php es el que nos proporcionará la vista, mientras que view_html.php tiene una función que se ejecutará durante la carga de la página. Este último archivo nos permite, por ejemplo, insertar en la cabecera los enlaces de sindicación, mira:
// Add feed links
if ($this->params->get('show_feed_link', 1)) {
$link = '&format=feed&limitstart=';
$attribs = array('type' => 'application/rss+xml', 'title' => 'RSS 2.0');
$this->document->addHeadLink(JRoute::_($link . '&type=rss'), 'alternate', 'rel', $attribs);
$attribs = array('type' => 'application/atom+xml', 'title' => 'Atom 1.0');
$this->document->addHeadLink(JRoute::_($link . '&type=atom'), 'alternate', 'rel', $attribs);
El archivo view.feed.php por su parte, prepara los datos para crear el archivo xml. Este archivo, si te sientes intrigado, se generará desde tu_sitio/libraries/joomla/document/feed/renderer en el archivo rss.php. Si examinas view.feed.php verás lo siguiente:
class ContentViewCategory extends JView
{
function display()
{
$app = JFactory::getApplication();
$doc = JFactory::getDocument();
$params = $app->getParams();
$feedEmail = (@$app->getCfg('feed_email')) ? $app->getCfg('feed_email') : 'author';
// Get some data from the model
JRequest::setVar('limit', $app->getCfg('feed_limit'));
$category = $this->get('Category');
$rows = $this->get('Items');
Mi pregunta es: ¿no sería mejor imprimir en tu feed el título y la descripción (metadatos) de la categoría en cuestión? Yo creo que esto sería lo correcto, así que si observas tenemos en el código anterior: $category = $this->get('Category') que podemos usar. Echa un vistazo a la base de datos, tabla "prefijo-categories" y verás que los campos que nos interesan son: title y metadesc. Por este motivo en el código anterior añado lo siguiente:
$descripcion = $category->metadesc;
if ($descripcion)
{
$doc->setDescription($descripcion);
}
$titulo = $category->title;
if ($titulo)
{
$doc->setTitle($titulo);
}
De este modo ya aparece el título y la descripción correcta de la categoría. Pero... ¡no olvides rellenar este dato!
Los archivos en Joomla! no hay que modificarlo directamente (hacerles un hack) porque Joomla! dispone de una buena herramienta que es la de sobreescribir los archivos desde tu plantilla.