Saltar al contenido

Drupal – ¿Cuál es el concepto básico detrás de los hooks?

Ya no tienes que investigar más en otros sitios ya que estás al sitio adecuado, poseemos la solución que necesitas pero sin problema.

Solución:

Las otras respuestas son excelentes, precisas y detalladas, pero no estoy seguro de que sean las “palabras simples” que expliquen el concepto básico que buscaba el autor de la pregunta.

Pienso en los ganchos como un punto donde el código se detiene y grita “¿Alguien más tiene algo que agregar aquí?“. Cualquier módulo puede tener una función que responda a esto y se active con los datos apropiados que se le pasen en ese punto del código.

Un buen ejemplo sencillo es hook_node_delete (). Cualquier módulo puede usarlo para hacer que sucedan cosas cada vez que se elimina un nodo. Los documentos le dicen que este gancho le pasa al módulo el objeto de ese nodo eliminado para trabajar, y describe otra información útil, como el momento exacto en que se llama (por ejemplo, que es antes de que los datos del nodo se eliminen de la base de datos) , y en qué parte del código de Drupal se llama al gancho (que puede ser más de un lugar).

Puede explorar qué ganchos existen y averiguar qué datos se les pasan explorando cosas que comienzan con “hook_” en la API de Drupal.

Los ganchos funcionan por convenciones de nombre: usando hook_node_delete como nuestro ejemplo, cuando el proceso de eliminación de nodos alcanza el punto donde se llama al gancho, para cada módulo con una función como esta [modulename]_node_delete() donde la palabra gancho en el nombre del gancho se reemplaza con el nombre del módulo (p. ej. my_amazing_module_node_delete() ), esas funciones se llaman.

¿Por qué? Entonces, cualquier módulo puede hacer cualquier cosa en estos key puntos: por ejemplo, puede mirar el nodo eliminado y hacer cosas si cumple una determinada condición (por ejemplo, enviar un correo electrónico a un administrador o iniciar algún proceso largo).

Algunos ganchos le permiten alterar las cosas que se han generado justo antes de que se procesen. Por ejemplo, hook_menu_alter () le pasa los elementos de menú actuales que ha generado el sistema. Cualquier módulo puede definir una función some_modulename_menu_alter () y mirarlos, opcionalmente cambiarlos (eliminar algunos, agregar algunos, ordenarlos …) y volver a pasar el menú recién modificado.

Es simple, realmente poderoso y está en el corazón de cómo funciona Drupal como un sistema modular. Las implementaciones de ganchos están en el corazón de la mayoría de los módulos de Drupal.

Al mirar a través del código de un módulo de Drupal, puede detectar qué funciones provienen de hooks (a diferencia de las funciones que simplemente se llaman desde el propio código del módulo), ya que la comunidad de Drupal impone una convención por la cual cada implementación de un hook tiene un comentario delante de él como este (tenga en cuenta el bit “Implementa gancho _…”):

/**
 * Implements hook_some_hook().
 *
 * Some descriptive summary of what this does
 */
function my_amazing_module_some_hook() {

Algunos módulos que actúan como API definen sus propios ganchos. Por ejemplo, Vistas define muchos ganchos que le permiten agregar, leer y editar datos en varios puntos del proceso de creación o visualización de una vista. Puede encontrar información sobre los ganchos creados en módulos personalizados desde dos lugares (asumiendo que el módulo sigue las convenciones, etc.):

  • El código y los comentarios en el modulename.api.php archivo en la carpeta del módulo
  • drupalcontrib.org: por ejemplo, aquí está su lista de módulos D7 sobre los que tienen información, y aquí está su página de ganchos de Vistas

Bootstrapping es, como otros explicaron, básicamente arrancar; no duplicaré las otras buenas explicaciones claras.

Los Hooks son en su mayoría implementaciones de los patrones Visitor y Observer.

Una de las implementaciones de hooks más comunes es hook_menu, que permite a los módulos registrar nuevas rutas dentro de un sistema Drupal.

function my_module_menu() 
  return array('myawesomefrontpage' => array(
    'page callback' => 'function_that_will_render_frontpage'
  ));

Un patrón muy frecuente en Drupal es tener un [DATATYPE]_info gancho y un [DATATYPE]_info_alter gancho. Si desea crear un nuevo tipo de campo, implementará el field_info-hook correspondiente, y si desea manipular uno existente, implementará el field_info_alter-hook correspondiente.

Editar: Como señala Chx en los comentarios, el patrón del observador es objeto orientado, que Drupal 7 sigue siendo, en su mayoría, no. Sin embargo, hay una página wiki, la programación de Drupal desde una perspectiva orientada a objetos (creada por JonBob el 4 de abril de 2005), que explica cómo Drupal usa patrones de código orientados a objetos a pesar de esto. Es interesante notar que menciona a los observadores, pero no a los visitantes.

Nota sobre Drupal 8 Esto es todavía bastante temprano y está sujeto a cambios, pero quiero agregar que si bien los ganchos han sido durante bastante tiempo el estándar de facto para agregar funcionalidad a Drupal, el concepto de complementos se volverá mucho más visible en Drupal 8, y nos dará nuevas formas de interactuar con Core. Tema relevante y documentación.

En términos simples, los ganchos son una especie de puentes que proporcionan una forma para que los módulos interactúen entre sí, alteren la estructura y los datos de los demás, proporcionen nuevos datos, etc.

En la mayoría de los casos, la palabra hook_ en los nombres de las funciones se reemplaza por el nombre de su módulo, y eso proporciona una forma para que su módulo aproveche la operación de otro módulo. Por ejemplo, un módulo central de drupal llamado “nodo” invoca varios ganchos. Uno de ellos es hook_node_update que se invoca cada vez que se actualiza un nodo existente. Cuando se invoca este gancho, su módulo (digamos que lo llamamos mymodule) implementación de hook_node_update se llama, que en este caso será una función en el archivo .module de su módulo llamada mymodule_node_update (Obviamente, esta función puede estar en cualquier archivo en la carpeta de su módulo siempre que también esté incluida en el archivo .module). A este gancho también se le pasarán los parámetros necesarios (variables) que puede usar, modificar y / o regresar a la función que invocó el gancho.

Cuando comencé a aprender Drupal, estaba en el mismo barco que tú ahora, es un poco difícil de entender al principio, pero una vez que lo entiendes, es tan simple e intuitivo. Buena suerte.

Sección de Reseñas y Valoraciones

Si aceptas, puedes dejar una noticia acerca de qué te ha impresionado de esta crónica.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *