php drupal drupal-modules system

php - ¿Puedes crear tu propio gancho en Drupal?



drupal-modules system (4)

Module_invoke_all () es tu boleto para crear tus propios ganchos:

mira la API:

http://api.drupal.org/api/drupal/includes--module.inc/function/module_invoke_all

y luego mira esta gran reseña:

http://web.archive.org/web/20101227170201/http://himerus.com/blog/himerus/creating-hooks-your-drupal-modules

(edit: estaba en http://himerus.com/blog/himerus/creating-hooks-your-drupal-modules pero esto ya no está)

Una vez que haya creado su gancho, se lo puede llamar en otro módulo usando:

/** * Implementation of hook_myhookname() */ function THISMODULENAME_myhookname(args){ //do stuff }

¿Es posible crear su propio gancho en un módulo de Drupal para que otros módulos de Drupal los consuman? De lo contrario, ¿existe un mecanismo en Drupal para que los desarrolladores de terceros proporcionen anzuelos? Si todo ha sido un no hasta ahora, ¿dónde está la lista de ganchos implementada?

Según entiendo las cosas, los módulos de Drupal funcionan en un evento como un sistema llamado hooks . Cuando crea un nuevo módulo, crea funciones que implementan un gancho. Por ejemplo, hay un gancho hook_delete . Si implementa una función en su módulo

function mymodule_delete($node) { }

esta función se invocará cada vez que se elimine un nodo.

Lo que quiero saber es si hay una forma de que yo, como desarrollador de módulos de terceros, pueda crear mis propios ganchos. Digamos, algo así como hook_alanskickbutthook para que otros desarrolladores de módulos puedan suscribirse a este gancho.

Si esto es posible, ¿cómo lo haces? He revisado los documentos oficiales y no he encontrado mucho allí, y todavía me mareo un poco cuando empiezo a hurgar en el código fuente de Drupal (entiendo la recursión, pero no dedico suficiente tiempo a pensar en problemas recursivos). Las soluciones completas son bienvenidas, pero estoy contento de que me apunten en la dirección correcta.



Por ejemplo, supongamos que desea crear hook_my_custom_goodness () para que otros lo utilicen. Luego solo coloque un código como este en su módulo en el punto donde desea que ocurra el enlace:

$variables[''msg''] = ''foo''; // Make sure at least one module implements our hook. if (sizeof(module_implements(''my_custom_goodness'')) > 0) { // Call modules that implement the hook, and let them change $variables. $variables = module_invoke_all(''my_custom_goodness'', $variables); } drupal_set_message($variables[''msg'']); // Will display ''bar'' instead.

Ahora, si alguien quisiera usar su gancho, entonces podrían hacerlo en su propio módulo de esta manera:

/** * Implements hook_my_custom_goodness(). */ function SOME_OTHER_MODULE_my_custom_goodness($variables) { $variables[''msg''] = ''bar''; return $variables; }

Hay una explicación más completa aquí:

http://tylerfrankenstein.com/code/drupal-create-custom-hook-for-other-modules


Si recuerdo ... http://api.drupal.org/api/drupal/modules--node--node.api.php/function/hook_delete/7

¿Ayuda esto? Ha pasado un tiempo desde que me metí con Drupal.

Para crear / ofrecer un enlace Drupal personalizado, debe implementarlo de tal manera que llamar al enlace con module_invoke o module_invoke_all no genere conflictos con otros enlaces de módulos. El nombre del gancho debe ser único y debe ofrecer todas las características / específicas de una manera general que no requiera ningún tipo de ajuste con el código. Toda la configuración debe ir en las páginas de administración y debe almacenar esas configuraciones en una tabla separada o en cualquier tabla existente creada por Drupal o módulos de los que dependen sus módulos. El gancho debe ser fácil de implementar por otros módulos y no debe ser muy complicado de implementar. Cuando crea ganchos personalizados, su (s) módulo (s) actúa (n) como proveedor de API.