Julio 12, 2013
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?.
- 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);
}
- 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!