在接触drupal之初,就对drupal的hook机制有点迷糊,但是又想弄清楚.
今天总算明白了,其实很简单.
核心就是module_invoke_all
怎么理解呢
比如在模块module_a有一个函数module_a_test,模块module_b有一个函数module_b_test.当然,里面可以带参数.
在一个地方,执行
$str = module_invoke_all('test')
.
那么$str里面,就是两个模块里面,hook_test的返回值了.
下面,就可以foreach($str as $v)进行处理hook_test的返回值了.
就这最后一步一直犯迷糊.总算想通了.纪念一下.
PS: 突然之间,想明白了.所谓的hook,就是可以批量获得特定函数返回值的一个函数.
比如
$menus = module_invoke_all('menu');
,$menus就是s所有函数名以_menu结尾function的的返回值.当然,前提是这个module要激活.
下面,就可以写程序对$menus进行各种处理了.
下面顺便说说module_invoke.其实就是调用函数.
比如module_invoke('kk','ss',$str);
这个执行的结果,跟下面的函数一样.
kk_ss($str);
下面附上module_invoke函数原型
function module_invoke() { $args = func_get_args(); $module = $args[0]; $hook = $args[1]; unset($args[0], $args[1]); $function = $module . '_' . $hook; if (module_hook($module, $hook)) { return call_user_func_array($function, $args); } }