Ala*_*orm 4 php drupal drupal-hooks drupal-modules
在Drupal 7(和Drupal 6?)系统中,什么"开始"钩子调用过程,或"顶级"钩子调用位于何处?
正如我目前了解Drupal模块系统,任何模块都能够为另一个模块创建一个钩子来实现.这意味着Drupal的大部分执行都是为其他模块实现钩子的模块,这反过来又为其他模块提供了钩子来实现.
我不清楚的是,是否有一个初始的顶级钩子在引导程序中调用以启动此过程,或者是否有几个非模块调用启动钩子调用过程,或其他什么(道歉)这是模糊和新的,但就像我说我不明白)
我查看了这个_drupal_bootstrap_full
功能,最后有一个很有希望
module_invoke_all('init');
Run Code Online (Sandbox Code Playgroud)
但是,我对该modules/
文件夹的搜索只显示了一个"init"钩子函数,这似乎不是一个启动点
system/system.api.php
1737:function hook_init() {
function hook_init() {
drupal_add_css(drupal_get_path('module', 'book') . '/book.css');
}
Run Code Online (Sandbox Code Playgroud)
所以,这对我说模块系统之外的东西踢掉了这一切.这是发生在一个地方,还是多个地方.这些地方在哪里?
我目前不是一个沉重的Drupal用户.我所有这一切的最终目标是孤立地理解Drupal的模块系统,这样我就可以调查并理解Drupal如何使用它的模块构建大多数人认为是Drupal的应用程序.欢迎任何/所有解释,但我试图从架构的角度理解事物.我知道你不需要这些知识来使用Drupal,但是我的大脑已经坏了,在我知道基本的PHP代码在做什么之前我不会让我前进.
钩子系统是Drupal内部的一个独立系统.它不负责引导.hook_init()只是在引导过程结束时调用的钩子.正如另一个答案所说,module_invoke_all()可以在进程中随时随地调用.
简而言之,在Drupal 7中,index.php中的以下两行负责请求的基本流程:
<?php
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
menu_execute_active_handler();
?>
Run Code Online (Sandbox Code Playgroud)
哪个可以翻译成两个步骤:
引导系统.这包括加载所有模块和必要的包含文件,数据库连接等.
查找负责此请求的菜单路由器项并执行它.
有人开始撰写一系列博客文章来详细描述它,请参阅http://becircle.com/blog_topics/line_line.