Skip to main content
  • Create new account
  • Reset your password
张文涛的个人博客
致力于提供Drupal开发,实践等方面的精品资讯

Main navigation

  • 首页
  • 关于
  • Glossary
  • 分享

Breadcrumb

  • Home
  • 费了好些时间,终于把drupal hook机制弄明白了
By admin | 2:40 PM CST, Sat June 09, 2012

在接触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);
  }
}


Glossary

  • May 2023 (7)
  • March 2023 (1)
  • October 2022 (1)
  • October 2021 (2)
  • August 2021 (4)
  • June 2021 (2)
  • May 2021 (1)
  • April 2021 (2)
  • November 2020 (1)
  • June 2020 (2)
  • December 2019 (2)
  • November 2019 (1)
  • August 2019 (1)
  • February 2018 (1)
  • October 2017 (1)
  • September 2017 (1)
  • July 2017 (1)
  • June 2017 (2)
  • May 2017 (1)
  • March 2017 (3)
  • December 2016 (2)
  • November 2016 (4)
  • October 2016 (3)
  • June 2016 (1)
  • December 2015 (1)
  • November 2015 (6)
  • October 2015 (2)
  • September 2015 (1)
  • August 2015 (1)
  • July 2015 (1)
  • June 2015 (1)
  • May 2015 (1)
  • March 2015 (1)
  • January 2015 (1)
  • December 2014 (3)
  • October 2014 (5)
  • September 2014 (3)
  • August 2014 (1)
  • July 2014 (1)
  • June 2014 (1)
  • May 2014 (1)
  • April 2014 (2)
  • March 2014 (2)
  • February 2014 (2)
  • January 2014 (4)
  • December 2013 (1)
  • March 2013 (2)
  • February 2013 (2)
  • December 2012 (2)
  • November 2012 (4)
  • October 2012 (1)
  • September 2012 (6)
  • August 2012 (15)
  • July 2012 (5)
  • June 2012 (13)
  • May 2012 (9)
  • April 2012 (8)
  • March 2012 (9)
  • February 2012 (3)
  • January 2012 (1)
  • December 2011 (1)
  • November 2011 (6)
  • October 2011 (2)
  • September 2011 (17)
  • August 2011 (4)
  • July 2011 (4)
  • June 2011 (5)
  • May 2011 (4)

Copyright © 2025

苏ICP备14044171号-1