Pedro Peláez | 17 febrero 2014 | Comentarios (0)
medium_120453784

Introducción

En Drupal el concepto de modulo difiere un poco de lo que son en otros CMS. Mientras en la mayoría, son soluciones más o menos completas de cara al usuario, en Drupal suelen estar más orientados a ampliar las herramientas para programadores o administradores de interfaz.

En este CMS, y gracias a los módulos Panels, Views y Caos Tools,  la creación de nuevas funciones para los visitantes se realizan a golpe de ratón sin la necesidad de tocar el código.

A veces nos encontramos con la necesidad de hacer cálculos u operaciones con los datos almacenados en Drupal que no podremos hacer directamente con la interfaz, o bien necesitamos que se hagan “a las espaldas” de los visitantes.

Lo más básico

El módulo más simple posible en Drupal 7 costa tan solo de dos archivos, el INFO y el MODULE. En el primero daremos información al CMS como el nombre, descripción, versión de Drupal que soporte, versión del módulo, archivos asociados, dependencias con otros módulos, etc…

Pero antes de empezar a escribir nada tendremos que elegir un nombre de “máquina” para nuestro módulo. Este nombre debe ser fácilmente distinguible de otros, sin espacios ni caracteres extraños, teniendo en cuenta que lo usaremos dentro del código para asociar nuestras funciones de respuesta con él. Usaremos para este tutorial el nombre “firstmod”.

Otro detalle importante es ¿dónde guardaremos nuestro módulo?

La respuesta más rápida es en /sites/all/modules/ pero si tenemos una instalación multidominio de Drupal también podría ir en la carpeta modules/ de cualquiera de ellos, pero para nuestro caso usaremos la respuesta rápida, y más generalizada.

Una vez decididos sobre estas dos puntos tan importantes pasaremos a crear el directorio para nuestro modulo: /sites/all/modules/firstmod/

Y crearemos los dos archivos que dijimos al principio que eran necesarios: firstmod.info y firstmod.module

Contenido firstmod.info

name = firstmod
description = Mi primer modulo para Drupal
core = 7.x
package = tools
php = 5.3
version = 7.x-1.0-dev

dependencies[] = ctools

configure = admin/config/content/firstmod

name: Es el nombre del módulo en la lista
description: Es la descripción a mostrar
core: Es la versión de Drupal compatible. Notar que solo se indica la versión mayor, 7.
package: Es el grupo al que pertenece el modulo, puede ser uno ya existente o uno nuevo.
dependencies: Indica los módulos que se requieren para el funcionamiento del nuestro, en este caso puse ctools como ejemplo aunque no es necesario de principio.
configure: Es la ruta URL del formulario de configuración del nuevo módulo. Es opcional y requerirá ciertas indicaciones en el archivo module para que funcione.

Contenido de firstmod.module

<?php

Si, el archivo firstmod.module puede estar totalmente vacío, creándose así el modulo más simple posible…

Y el resultado es el siguiente:

vista modulo mas simple

Hooks

Antes de seguir hay que introducir el concepto de HOOK.

Son personalizaciones de acciones. O en lenguaje llano los Hooks nos permiten modificar el comportamiento de un método o función sin modificar su código, siempre que esté preparado para ello.

Un ejemplo, pongamos que tenemos una función que devuelve un listado de las ciudades de España, y que además está preparado para usar Hooks sobre su respuesta. Cuando esa función sea usada, antes de responder, invocará todos los hooks que “existan” para ella, alguno de esos hooks puede coger la lista de ciudades y filtrarlas, reduciendo la respuesta a las ciudades de más de 10.000 habitantes. Haya donde se llamara a la función de las ciudades ahora recibirá el listado de las ciudades de España con más de 10.000 habitantes y no todo el listado de ciudades.

En cualquier momento podremos desactivar el Hook de filtro y cuando la función sea llamada de nuevo devolverá el listado completo, todo esto sin tocar la función original.

El formulario de configuración

Para añadir un formulario de configuración a nuestro modulo tendremos que crear un Hook sobre hook_menu() de Drupal. La forma en la que se hace esto es sustituyendo la palabra hook_ por el nombre de nuestro modulo, quedando firstmod_menu(). Drupal se encargará de encontrar el hook y hacerlo funcionar cuando sea necesario.

Añadimos el siguiente código a firstmod.module:

/**
* Implements hook_menu().
*/
function firstmod_menu() {
$items = array();
$items['admin/config/content/firstmod'] = array(
'title' => t('Configuration of firstmod'),
'description' => t('Configure the firstmod module'),
'page callback' => 'drupal_get_form',
'page arguments' => array('firstmod_admin'),
'access arguments' => array('administer firstmod settings'),
'type' => MENU_NORMAL_ITEM,
);

return $items;
}

En este hook devolvemos un listado de opciones de menú a agregar al panel de admistración. La clave del array será la ruta a la configuración, la misma que declaramos en el archivo info.

title será el título a mostrar en la opción. Está en ingles porque Drupal usa este idioma como base y con la función t() la traduce al idioma final. Si nos acostumbramos a esta forma de trabajar no será nada completo traducir nuestro modulo a cualquier otro idioma.

“page arguments” indica cual será la función encargada de declarar el formulario de configuración según la FORM API y “access arguments” indica el permiso necesario para poder acceder. Si dejamos el modulo tal cual está ahora solo se podrá acceder con el usuario 1, un usuario especial en Drupal con todos los permisos, cualquier otro usuario no podrá acceder y además, como no hemos declarado el permiso, tampoco le podremos dar acceso.

Así que vamos a declarar el permiso haciendo uso de otro hook, en este caso de hook_permission() añadiendo el siguiente código a firstmod.module:

/**
* Implements hook_permission().
*/
function firstmod_permission() {
return array(
'administer firstmod settings' => array(
'title' => t('Administer firstmod configurations'),
'restrict access' => true,
)
);
}

Ya podemos dar acceso a otros usuarios, pero no tenemos el formulario de configuración. Para crearlo habrá que implementar la función que declaramos en el hook_menu(): ‘firstmod_admin’.

Volvemos a agregar código a firstmod.module:

/**
* Formulario de configuración
*
* @return array The form structure.
*/
function firstmod_admin() {
$form = array();

// Algo que configurar
$form['firstmod_something'] = array(
'#type' => 'textfield',
'#title' => t('Something'),
'#default_value' => variable_get(‘firstmod_something’, ""),
'#size' => 60,
'#maxlength' => 250,
'#description' => t("Something"),
'#required' => TRUE,
);

return system_settings_form($form);
}

En este hook devolvemos un array, tuneado como formulario de configuración, con un campo llamado firstmod_something. En casi todas partes ponemos delante firstmod para asegurarnos que no “chocamos” con otros modulos en sus configuraciones y métodos.

“variable_get()” devuelve una variable global en Drupal. Usando esta función nos aseguramos que el valor está disponible para todas las peticiones al servidor, sea cual sea el servidor que responda. (A veces las webs usan muchos servidores como si fuera uno solo, mirarse la documentación de PHP sobre este tema)

Veamos cómo queda:

Activamos el modulo…

modulo activo

y vamos a la configuración…

panel de configuracion

Y para dar permisos a otros usuarios…

permisos

Este ejemplo y guía nos sirve de punto de partida para crear nuestro módulo Drupal 7, lo siguiente es ver la documentación de drupal.org y mirarse los módulos que han creado otros… una de las ventajas del open source es que podemos aprender de los demás.

Dudas, consultas, etc… bien podéis dejar vuestros comentarios o contactarnos.

Creditos imagen destacada: GregoryH via photopin cc

Comments are closed.

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR