Ala*_*orm 33 php drupal system drupal-modules
是否可以在Drupal模块中创建自己的钩子以供其他Drupal模块使用?如果没有,Drupal中是否有一个机制可供第三方开发人员提供钩子?如果到目前为止一切都没有,核心中的钩子列表实现了什么?
据我所知,Drupal模块可以处理类似系统的事件,称为钩子.创建新模块时,可以创建实现钩子的函数.例如,有一个hook_delete
钩子.如果在模块中实现了一个功能
function mymodule_delete($node)
{
}
Run Code Online (Sandbox Code Playgroud)
删除节点时将调用此函数.
我想知道的是,作为第三方模块开发人员,有没有办法创建我自己的钩子.比方说,hook_alanskickbutthook
其他模块开发人员可以订阅这个钩子.
如果可以,你怎么做?我查看了官方文档并且在那里找不到多少,当我开始探索Drupal源代码时,我仍然感到有些晕眩(我理解递归,但是没有花太多时间考虑递归问题).我们欢迎完整的解决方案,但我很高兴能够指出正确的方向.
jps*_*ack 37
Module_invoke_all()是创建自己的钩子的门票:
看API:
http://api.drupal.org/api/drupal/includes--module.inc/function/module_invoke_all
然后看看这篇伟大的文章:
(编辑:在http://himerus.com/blog/himerus/creating-hooks-your-drupal-modules,但现在已经不见了)
一旦你做了钩子,它可以在另一个模块中使用:
/**
* Implementation of hook_myhookname()
*/
function THISMODULENAME_myhookname(args){
//do stuff
}
Run Code Online (Sandbox Code Playgroud)
例如,假设您要为其他人创建hook_my_custom_goodness()以供使用.然后只需将这样的代码放在您希望挂钩发生的模块中:
$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.
Run Code Online (Sandbox Code Playgroud)
现在,如果有人想使用你的钩子,那么他们可以在他们自己的模块中这样做:
/**
* Implements hook_my_custom_goodness().
*/
function SOME_OTHER_MODULE_my_custom_goodness($variables) {
$variables['msg'] = 'bar';
return $variables;
}
Run Code Online (Sandbox Code Playgroud)
这里有一个更完整的解释:
http://tylerfrankenstein.com/code/drupal-create-custom-hook-for-other-modules