Se encuentra usted aquí

Internet está lleno de tutoriales acerca de cómo usar el panel de control que tiene Drupal, pero a la hora de encontrar información sobre cómo hacer las cosas mediante código, la documentación que buscamos parece que queda sepultada por la otra manera de hacer las cosas. Este tutorial te ayudará a crear tu primer módulo en Drupal 7, extendiendo el núcleo del sistema.

Sistema de ficheros

Al ser un sistema tan genérico, puedes hacer las cosas de muchas formas diferentes, según el sitio web que estés montando. Tienes que diferenciar el contenido de tu directorio Drupal en dos partes, el núcleo del sistema y todo lo que hayas personalizado tú (o los módulos de otras personas que hayas instalado).

En el directorio "sites", se encuentran todos los módulos y templates que hayas creado o instalado, y dentro de éste, tendrás al menos "all" y "default". Esta configuración de directorios existe porque una misma instalación de Drupal puede acoger más de un sitio web, y cada uno de ellos puede tener sus propios módulos y plantillas. En este tutorial, todos nuestros cambios los vamos a meter dentro de "sites > all".

Hay gustos para todo, en algunos sitios te van a recomendar meter todos los módulos que no hayas creado tú dentro de "sites > all > modules" y que los tuyos los metas en "sites > default > modules", mientras que otros sitios te recomendarán meter tus módulos dentro de "sites > all > modules > custom". A nivel técnico, da exactamente lo mismo, Drupal encontrará tus módulos los pongas en un sitio u otro, mi preferencia particular es esa última, pero tú usa la opción que mejor se adapte a tu estilo de organización.

Lo único importante es que, bajo ningún concepto, debes añadir, editar o borrar nada fuera de la carpeta sites. Sería una muy mala práctica porque cualquier cambio que hicieses, sería machacado por una nueva versión de Drupal.

Eligiendo un nombre y creando los ficheros necesarios

En el momento de escribir este tutorial, Drupal tiene más de diez mil módulos para la versión 7, no es que sea problemático elegir un nombre de proyecto que no esté cogido ya, pero intenta que no exista. Además, por convención, los espacios entre palabras se escriben con una barra baja, por ejemplo google_analytics.

Para ver si tu módulo existe, no tienes más que probar a entrar en https://www.drupal.org/project/nombre_de_tu_modulo. Te voy a ayudar a crear un módulo sencillo que se llame hola_mundo, que no existe. Crea el directorio "sites > all > modules > custom > hola_mundo", y dentro, añade un fichero con el mismo nombre acabado en info (en este caso hola_mundo.info).

Todo módulo de Drupal necesita tener su fichero .info, donde le escribiremos algunos datos como el nombre, la versión de Drupal compatible y poco más.

Las tres primeras lineas son obligatorias, name y description son obvias, core es la versión de Drupal compatible con tu módulo, si escribes 7.x será compatible con cualquier versión de Drupal 7. Las dos últimas lineas son opcionales, puedes especificar la versión concreta de tu módulo y el paquete al que pertenece. Se trata de tener bien organizados tus módulos.

Para que tu módulo sea un módulo, necesita tener junto a .info un fichero .module que tendrá el código. De momento puedes simplemente crearlo y dejarlo vacío, luego, verás que ya puedes activar tu módulo.

¡Pero todavía no hace nada!, vamos a resolverlo ;)

¡Hola mundo!

Cuando hablamos de crear módulos de Drupal, lo que queremos hacer es extender el núcleo, sin tener que modificarlo. Puedes hacerlo a través de los hooks (ganchos) que ofrece. Los ganchos vendría a ser como suscribirse a una serie de enventos y actuar en consecuencia, "si pasa esto, haz esta cosa". Hay dos en los que nos vamos a fijar en este tutorial, hook_block_info() y hook_block_view(), que nos servirán para definir y preparar el contenido de un bloque, respectivamente.

A la hora de generar cada página Drupal buscará, dentro de cada módulo, si se está enganchando a cualquiera de los hooks de su API y, si es así, invocará las funciones en un orden determinado.

La manera de engancharte a estos hooks es copiando el código de ejemplo que hay en la documentación, editándolo con nuestras necesidades. Además, tenemos que sustituir, en el nombre de la función que estamos editando, la palabra "hook" por el nombre de nuestro módulo, en nuestro caso "hola_mundo". Paso a paso, ve a la documentación y copia el código en nuestro hola_mundo.module, como en este ejemplo:

En el ejemplo vemos que hook_block_info define varios bloques de contenido, syndicate y recent, fíjate que la función no hace nada más que decirle a Drupal qué tipo de bloques vamos a mostrar, sin especificar el contenido. Ahora voy a modificar el código para que quede tal y como lo necesitamos.

Primero, en el nombre de la función, he cambiado la palabra hook por el nombre de nuestro módulo, hola_mundo. A continuación he borrado los bloques de ejemplo y he creado el mío, saludo. Dentro de info estoy usando la función de Drupal t(), que sirve para traducir cadenas de texto. Si todas las cadenas de texto las creas de esta forma, traducir tu web a cualquier otro idioma será coser y cantar.

Ahora vas a hacer lo mismo con hook_block_view, lee la documentación, copia y pega el código que te ofrece y edítalo a tu gusto, tal y como hago yo en este pantallazo:

Para el contenido estoy usando lo que se llama en Drupal un Render Array, que se merecen un tutorial propio. A la hora de renderizar las páginas, Drupal convertirá estos arrays en HTML. Hay todo tipo de arrays prefabricados listos para usar: tablas, campos para formularios, enlaces, imágenes... el más simple sería escribir directamente #markup, en el siguiente tutorial veremos cómo prepararlos, completamente reutilizables y muy fáciles de retocar con nuestras plantillas.

De momento, ¡has terminado de crear tu primer módulo!, vamos a jugar ahora un poco con él. Si todavía no habías activado tu módulo, hazlo, es un buen momento ;-)

Probando el módulo

En tu panel de control de Drupal, dentro de Estructura > Bloques, verás que tienes un bloque llamado "Greeting" (o el nombre que le hayas puesto en tu hook_block_info()). Para hacerlo visible basta con arrastrarlo hasta donde lo quieres mostrar. En mi caso lo voy a poner en la primera barra lateral, pero tú puedes ponerlo donde quieras.

Guarda los cambios y vuelve a mirar la portada... ¡sorpresa!.

Los bloques son muy flexibles, puedes ponerlos en cualquier parte de tu página y configurarlos para que se muestren únicamente a determinados grupos de usuarios o URLs. Aunque nuestro ejemplo es extremadamente simple, piensa que puedes hacer un bloque que tenga un formulario y se encargue de validar y procesar los datos que le envían tus usuarios, independientemente de dónde lo coloques, haciendo que tus módulos sean verdaderamente reutilizables entre proyectos. El bloque de login de Drupal, por ejemplo, funciona exactamente igual en el footer que en la cabecera, sin tener que cambiar una linea de código.

Tarea para casa

Esta vez no te vas a ir de rositas, hemos creado nuestro módulo usando la función t() para poder traducir más adelante nuestra página a otros idiomas, y por defecto se verá en inglés. ¡Intenta traducirlo al español!, no tienes más que ir a Configuración > Regional e idioma  > Traducir interfaz. Busca las frases que quieres traducir y edítalas, simplemente recuerda que el campo de búsqueda tiene en cuenta las mayúsculas. ¡Suerte!

Espero que hayas aprendido un poco más sobre Drupal y su manera de extender el sistema.

Añadir nuevo comentario

Plain text

  • No se permiten etiquetas HTML.
  • Las direcciones de las páginas web y las de correo se convierten en enlaces automáticamente.
  • Saltos automáticos de líneas y de párrafos.