Estoy desarrollando un módulo, pero los ganchos que estoy agregando no se invocan desde Drupal. Sucede con más de un gancho.
Leí la documentación de los ganchos, y no puedo encontrar nada que explique por qué sucede esto. Verifiqué que estoy usando los parámetros correctos y devolviendo el valor correcto.
¿Qué estoy haciendo mal? ¿Hay algo que me falta?
Respuestas:
Al desarrollar un módulo, debe tener en cuenta las siguientes notas.
La implementación de un enlace realizado desde un módulo es una función cuyo nombre tiene el prefijo del nombre corto del módulo (también llamado el nombre de la máquina ); del nombre del gancho, retire la parte del gancho y reemplácela con el nombre de la máquina del módulo. Por ejemplo, la implementación de
hook_menu()
done from example.module esexample_menu()
. Si el módulo es example_menu.module, y la función esexample_menu()
, eso no se considera lahook_menu()
implementación para example_menu.module.Esto también significa, por ejemplo, que la
hook_form_alter()
implementación en example_form.module no esexample_form_alter()
, peroexample_form_form_alter()
. Como otro ejemplo, la implementación dehook_form_FORM_ID_alter()
done para alterar el formulario devueltouser_register_form()
por example.module no lo esexample_form_user_register_alter()
, peroexample_form_user_register_form_alter()
. (El ID del formulario es user_register_form ).En términos generales, el uso de caracteres en mayúscula en el nombre de la máquina del módulo no crea problemas: PHP no hace diferencias entre
myModule_get_value()
, ymymodule_get_value()
,$value = myModule_get_value()
llamaríamyModule_get_value()
, omymodule_get_value()
.Sin embargo, hay un caso en el que el uso de caracteres en mayúscula en el nombre de la máquina de un módulo podría causar problemas: al definir los enlaces de actualización para un módulo.
drupal_get_schema_versions()
, la función que devuelve una lista de actualizaciones disponibles, contiene el siguiente código.La última línea ejecutada desde
drupal_get_schema_versions()
es la siguiente.Si el nombre del módulo es myModule.module,
drupal_get_schema_versions('myModule')
devolverá solo las funciones con un nombre que comienza con myModule_update y termina con un número; funciones comomymodule_update_7120()
no se incluirán porque la expresión regular utilizadadrupal_get_schema_versions()
es sensible a mayúsculas y minúsculas. Esto todavía se aplica a Drupal 8, ya que la expresión regular sigue siendo la misma que se usa en Drupal 7.Algunos ganchos se llaman en momentos específicos. Por ejemplo,
hook_menu()
yhook_menu_alter()
se llaman desde Drupal 7 después de que un módulo se ha habilitado / deshabilitado, o cuando se borra la memoria caché para la información del enrutador;hook_init()
no se invoca para páginas en caché.Una vez que se invocan los ganchos porque ocurrió un evento específico, no se volverán a llamar hasta que no ocurra un evento similar. No se llaman en dos solicitudes de página sucesivas.
Drupal almacena en caché la lista de ganchos implementados desde un módulo. Si está editando el código de un módulo habilitado para agregar nuevos enlaces, primero debe deshabilitar y volver a habilitar el módulo, o Drupal no notará que hay nuevos enlaces.
Asegúrese de que una
return
declaración no se filtró en una de sus funciones de enlace durante una refactorización. Tiene el potencial de romper no solo el gancho en el que aparece, sino también causar una reacción en cadena que también rompe otros ganchos, haciendo que el problema sea difícil de localizar.fuente