Los módulos en Drupal permiten extender la funcionalidad de la web, añadiendo, por ejemplo, la posibilidad de realizar búsquedas por palabras dentro del contenido o de agregar comentarios a los nodos.

En este artículo me limitaré a dar una pequeña introducción acerca de cómo están organizados los módulos en Drupal, y hablaré de algunos de los que he activado para esta web.

Módulos

En la página oficial de Drupal se puede encontrar toda clase de información detallada acerca de los procesos de construcción, instalación, configuración, actualización y desinstalación de módulos.

Los módulos en Drupal son ficheros con extensión .module que contienen funciones escritas en PHP. Estas funciones actúan como hooks (funciones gancho), que son llamadas por Drupal durante sus procesos habituales de gestión de contenido y construcción de páginas web. Por ejemplo, cada vez que un nodo es creado, visualizado, modificado o borrado, Drupal llama a una de estos hooks pasándoles el contenido del nodo. De esta forma los módulos tienen la posibilidad de modificar y adaptar la información a visualizar en las páginas web antes de que se mande definitivamente al navegador.

Los hooks no sólo son llamados cuando se gestionan los nodos, también se llaman en muchas otras circunstancias. Por ejemplo, cuando se comprueba si el usuario tiene acceso a la información que está intentando consultar, cuando se empieza a crear o está a punto de terminarse una página web, cuando se están creando o modificando comentarios, cuando se están creando los menús, y así un largo etcétera.

Todas estas llamadas que realiza Drupal a los módulos posibilita que el sistema sea altamente «maleable», logrando que se pueda modificar prácticamente el funcionamiento entero del sistema sin tener que alterar en ningún momento el núcleo (core) del mismo. De hecho, muchas de las características básicas de Drupal, como puede ser la posibilidad de organizar el contenido en categorías, son tratadas en la práctica como módulos.

La mayoría de los módulos en Drupal se instalan simplemente copiándolos en el directorio modules. Y aunque normalmente sólo se componen de un fichero .module, algunas veces pueden venir acompañados de archivos auxiliares, como hojas de estilo CSS por ejemplo.

Actualmente existe un número realmente grande de módulos disponibles. De temática diversa y de gran calidad. Antes de decidirse por un módulo u otro se deben revisar los requerimientos de los mismos. La mayoría de los módulos sólo piden que se instalen en una versión determinada de Drupal, pero otros pueden exigir la presencia de algún componente externo a Drupal, como la posibilidad de ejecutar código Perl, o quizás una librería de terceros. Incluso algunos requieren la modificación del esquema de la base de datos, mediante la adición de columnas a las tablas ya existentes o la creación de tablas nuevas.

search.module

Este módulo viene con la distribución de Drupal, aunque por defecto no se encuentra activo. Sirve para indexar el contenido del sitio de forma que se puedan realizar búsquedas sobre el mismo.

Después de activarlo, de la forma habitual a través del menú administrar->módulos, aparecerá una nueva opción de menú administrar->opciones->buscar. A través de esta opción se puede ver el nivel de indexación del contenido del sitio, el número de elementos que queremos que se indexen cada vez, y el tamaño mínimo de las palabras a indexar.

En las páginas web el bloque de búsqueda aparece como un formulario que se compone de un cuadro de entrada de texto y un botón. Para que se visualice, siempre y cuando lo soporte el tema que tengamos configurado, hay que marcar la opción Bloque de Búsqueda a través del menú administrar->temas. Y para que los usuarios anónimos que visitan el sitio tengan la posibilidad de realizar búsquedas, se les debe dar permiso a través de administrar->control de acceso marcando como activa la casilla del módulo search.

El proceso de indexación del contenido no es automático. Se puede ejecutar manualmente a través del menú, o invocando desde el navegador al fichero cron.php que se distribuye con Drupal y se encuentra normalmente en el directorio raíz de la instalación. Otra posibilidad es automatizar el proceso a través del cron del servidor utilizando un crontab similar al siguiente:

0 4 * * * wget -O - -q http://www.dominio.com/cron.php

Comentar que cron es un servicio (demonio) planificador de tareas que se ejecuta en el servidor. Y crontab es un comando Unix que permite ver, editar, o borrar, las lista de tareas actuales programadas. Cada tarea se programa indicando la hora en la que se quiere ejecutar y la línea de comandos a ejecutar. Así, en el ejemplo anterior, se está indicando que se ejecute un wget sobre cron.php cada día a las cuatro de la mañana. Los asteriscos se utilizan como comodines para día, mes y año, indicando así que la tarea programada debe ejecutarse periódicamente todos los días. wget es un comando que invoca al fichero como si se hiciera desde un navegador manualmente.

Si la programación del cron resulta innacesible, o simplemente dificil de entender, siempre queda la solución de utilizar un módulo de Drupal llamado Poormanscron, algo así como el cron de los pobres, que realiza todo el proceso automáticamente por nosotros de forma transparente.

comment.module

Este módulo permite que se puedan añadir comentarios a los nodos. Lo que es una buena forma de conseguir que los visitantes del sitio puedan colaborar de una forma rápida e inmediata en la web.

El módulo viene con la distribución de Drupal, pero al igual que el de búsqueda del apartado anterior, se encuentra desactivado por defecto. Al activarlo, a través de administrar->módulos, aparecerá una nueva opción de menú administrar->comentarios. En esta opción puede verse la lista de los últimos comentarios enviados y los que están pendientes de aprobación. Además, permite configurar la forma en la que deben visualizarse los comentarios en las páginas, tanto la lista de comentarios en sí misma como el formulario para su envío. Opcionalmente, y si se configura la característica de moderación de comentarios, pueden crearse roles y umbrales de moderación, y consultarse los votos efectuados en cada comentario.

Para los que usuarios anónimos puedan ver y enviar comentarios, se les debe dar los permisos oportunos a través del menú administrar->control de acceso, además de a través de las opciones propias del módulo de comentarios. Como mínimo deberían activarse los permisos acceder a comentarios, enviar comentarios y enviar comentarios sin aprobación, aunque este último no es realmente obligatorio, dependerá de la política de cada sitio en concreto.

A partir de la activación de este módulo, a continuación de todos y cada uno de los contenidos mostrados en el sitio aparecerá un enlace con el texto añadir nuevo comentario, si no se ha enviado ningún comentario todavía, o (n) comentarios, si se ha enviado alguno, siendo n el número de comentarios enviados.

upload.module

Este módulo permite que se puedan adjuntar ficheros a los nodos. Es un módulo que viene con la distribución de Drupal, y tras activarlo aparece una nueva opción de menú en administrar->opciones->cargas. En esta opción se puede configurar el tamaño máximo permitido para los ficheros adjuntos y la resolución máxima (AnchoxAlto) en caso de que el fichero se trate de una imagen.

A partir de la activación de este módulo, y dentro del formulario de creación de contenido nuevo, aparecerá un cuadro de «Adjuntos» a través del que se podrán seleccionar los ficheros a adjuntar al nodo. Los ficheros se seleccionan escribiendo la ruta completa en la que se encuentran ubicados, o a través del botón «Examinar…» que abre la típica ventana de selección de archivos sobre el contenido de nuestro disco duro local, y se adjuntan con el botón «Adjuntar». Los ficheros adjuntados a un nodo se listan al final del mismo en forma de enlaces (links) para que puedan ser vistos o descargados por los visitantes de la web.

A través de la opción administrar->control de acceso se pueden configurar los permisos «cargar ficheros» y «ver ficheros cargados» del módulo.

codefilter.module

Este módulo no viene con la distribución de Drupal, pero se puede descargar de la web oficial. Es obra de Steven Wittens, que a su vez se inspiró en el módulo project de Kjartan Mannes. Su objetivo es el de mostrar en colores la sintaxis del código PHP embebido dentro del texto de los nodos.

Es un módulo de tipo filtro, es decir, filtra el contenido antes de su presentación. Detecta las ocurrencias tanto de <?php y ?>, como de <code> y </code>, marcando todo el bloque con la etiqueta (tag) <div class=”codeblock”>. Evita la necesidad de sustituir manualmente los < por &< y los > por &>, y extrae los elementos que componen el código PHP, como los nombres de las funciones por ejemplo, y les añade etiquetas de estilo con el color correspondiente. En realidad, todo el trabajo lo hace la función estándar highlight_string que viene con PHP, lo que hace este módulo es poner dicha función a disposición de los usuarios de Drupal.

El proceso de instalación es sencillo, basta con crear un subdirectorio para el módulo en el directorio modules. Una vez activado, de la forma habitual a través de administrar->módulos, se puede configurar mediante administrar->formatos de entrada indicando los formatos para los cuales se debe aplicar el filtro de código, así como qué filtro tiene prioridad en caso de existir más de uno.

Conclusiones

El sistema de módulos en Drupal es realmente fantástico. Los hooks permiten modificar el comportamiento del sistema de una manera muy sencilla. Es como una cadena de montaje en la que se va pasando individualmente por cada uno de los módulos instalados hasta obtener el producto final resultante de la interacción de todos ellos en conjunto.

La instalación de un nuevo módulo resulta por lo general muy sencilla. Aunque esto depende de los requerimientos de cada módulo en particular. Como mínimo se debe tener los conocimientos necesarios para acceder al servidor y copiar los ficheros del módulo en el directorio modules. Tener una opción de instalación directamente a través del menú de administración podría ser de ayuda para los usuarios sin estos conocimientos.

La idea de programar un módulo resulta bastante tentadora, sobre todo porque el API es claro e intuitivo, como lo demuestra el gran número y la diversidad de los módulos existentes en la actualidad. Trataré de escribir un artículo en un futuro acerca de la programación de un módulo propio a través de un ejemplo.