Como crear un hook personalizado en Drupal 7

Author Top
estebanvalerioh

Crear un hook personalizado es más fácil de lo que se pueda pensar.  En este post les indico una forma de hacerlo y en caso de tener duda de qué son hooks, les recomiendo visitar el post ¿Qué son los hooks en Drupal y cuales son los más usados?

1. Invocar hook personalizado.

Para definir el hook podemos utilizar alguna las siguientes funciones:

module_invoke($module, $hook)
module_invoke_all($hook)

La primera función invoca a un hook en un módulo determinado, mientras que la segunda función invoca a un hook, en todos los módulos habilitados que lo implementen.

Según la documentación de Drupal, es buena práctica crear en nuestro módulo un archivo con el nombre modulename.api.php, donde especifiquemos y ejemplifiquemos el uso de nuestros hooks.

Supongamos que tengo un módulo custom llamado pruebas que cuenta con una tabla en mi base de datos.  Y tengo una función que inserta valores en la tabla y luego invoca el hook que estamos creando llamado hook_values_insert() para pasar el resultado obtenido de insertar en la base de datos a otros módulos, con el fin que implementen algo con los datos, esa función se vería así:

function pruebas_insert_values($values) { 

  ...  

  // Inserta valores en mi tabla.
  $resultado = db_insert('mi_tabla')->fields(array());

  // Invoca hook_values_insert() para todos los módulos pasando como parametro
  // el resultado obtenido luego de la inserción en la tabla.
  module_invoke_all('values_insert', $resultado);
}

2. Ejemplificar el hook personalizado.

En la sección anterior se creo el llamado al hook values_insert, para implementar el hook crearemos el archivo pruebas.api.php se tendría que ver así:

/**
 * @file
 * Hooks proveidos por el modulo de pruebas.
 */

/**
 * Responde luego de insertar valores en la función pruebas_insert_values().
 *
 * Este hook se invoca luego de que los valores fueron insertados en la base de datos.
 *
 * @param array $values
 *   Valores que fueron insertados.
 */
function hook_values_insert($values) {
  // Hacer algo con $values.
  var_dump($values);
}

De esta manera, todos los módulos que deseen pueden implementar la función hook_values_insert() van a poder utilizar los valores que fueron insertados en la base de datos.

Espero que le saquen provecho.

Saludos!