Una de las cosas que nunca me ha acabado de convencer de Drupal es la forma en que compone los feeds. Creo que debería invertirse un poco más de tiempo en mejorar una característica que hoy en día resulta básica. El programa debería hacer un mejor trabajo por sí solo como hacen otros CMS. Ya se mejoró algo en la versión 4.7 y espero que siga haciéndose en la 5 que se publicará a lo largo de este año.

El principal inconveniente que le veo es que basa la composición de los feeds en el ‘teaser’, esa parte del contenido de los nodos (posts, artículos, …) que se marca con una etiqueta <!–break–> para que se corte justo en ese punto, a modo de resumen, y se muestre junto el típico enlace de «leer más» o «leer el artículo completo». Si bien me parece una forma rápida y adecuada de afrontar el tema para la mayoría de las situaciones, hay veces en que esa solución no resulta la más conveniente, como por ejemplo cuando los nodos son pequeños y carece de sentido cortarlos. Pero sobre todo no me convence porque para mí son cosas distintas. Una cosa es el aspecto que quiero que tengan los posts en mi web y otra muy distinta es como deberían aparecer en los feeds.

La ventaja de utilizar programas de código abierto es que uno puede modificarlos si tiene el conocimiento y paciencia necesarios. En el caso de Drupal además resulta fácil, está escrito en PHP y su código fuente es muy claro, de lo mejor que hay por ahí. Aunque no conviene modificar el núcleo y es mejor hacer un módulo independiente esta vez he optado por la solución más rápida. Cosas de la vida moderna. Mi idea ha sido la de crear una etiqueta <!–feed–> realizando el corte para los feeds de igual forma que se hace para el teaser. En un post como este: «<!–feed–>En un lugar de la Mancha<!–feed–> de cuyo nombre no quiero acordarme<!–break–> hacía tiempo que …» sólo se incluiría la primera parte (En un lugar de la Mancha) en los feeds, y el teaser seguiría funcionando como hasta ahora (En un lugar de la Mancha de cuyo nombre no quiero acordarme). He utilizado dos etiquetas para los feed para tener una mayor control.

El código fuente que he tenido que modificar es el que se encuentra en el fichero node.module, en la función node_feed, concretamente en el switch sobre $item_length (es fácil de localizar), y lo que he hecho ha sido poner las siguientes líneas en el case para ‘teaser’:

$item_text = $item->teaser;
$parts = explode('', $item_text);
if (count($parts) == 3){
  $item_text = $parts[1] . "[...]";
}

Este código lo que hace es dividir el contenido de los nodos utilizando la etiqueta <!–feed–> como punto de corte y se queda con la parte central. Sencillo, ¿no?.