it-swarm-es.com

¿Puedo cambiar el orden en que se llama la implementación de gancho por diferentes módulos?

En D6, uso un módulo contrib, pero me gustaría anular un poco de su comportamiento. Tengo un módulo personalizado para eso, pero mi implementación del enlace relevante se llama antes de la implementación en el módulo contrib, por lo que la versión del módulo contrib "gana".

¿Hay alguna manera de cambiarlo y obligar a mi propio gancho a ser llamado último?

Aquí están los detalles específicos:

Me gustaría eliminar el nombre de usuario "Anónimo" predeterminado para usuarios no registrados en el formulario de comentarios. Creé un pequeño módulo personalizado, Tweak_comment_form, que implementa el enganche form_alter y elimina el valor predeterminado del campo de nombre ( vea las respuestas a mi pregunta anterior sobre eso ).

Sin embargo, también uso un módulo contrib llamado RealName , que también implementa form_alter. RealName hace lo que quiero para los usuarios registrados (reemplaza el nombre de usuario con "nombre real"), pero vuelve a asignar el valor predeterminado al campo de nombre.

7
daphshez

Sí, de manera muy simple, debe configurar el peso de su módulo para que sea más pesado. Hay algunas maneras en que puede hacer esto, pero si su módulo es un módulo contrib que se publica de nuevo en Drupal.org, la mejor manera es configurarlo en hook_install() con un código como:

db_query("UPDATE {system} SET weight = 100 WHERE name = 'MYMODULE'");

Alternativamente, puede usar Módulo de utilidad para establecer los pesos del módulo desde la página del módulo, sin embargo, esto es solo para su instalación personal.

7
Decipher

Como información adicional útil en drupal7, tiene hook_module_implements_alter.

Allí también puede cambiar los ganchos de otros módulos, por ejemplo, mover su módulo al final/al inicio.

4
Daniel Wehner
function my_module_module_implements_alter(&$implementations, $hook) {
  if ($hook != 'the_hook_to_change') {
    return;
  }
  $module = 'my_module';
  $group = array($module => $implementations[$module]);
  unset($implementations[$module]);

  $implementations = $group + $implementations; // If you want your implementation to run first.
  //$implementations = $group + $implementations; If you want your implementation to run last.
}

Pequeña modificación basada en https://api.drupal.org/comment/48623#comment-4862

1
Gokul N K