Php Drupal';s模块钩子调用启动了吗?
在Drupal7(和Drupal6?)系统中,“启动”钩子调用过程的是什么,或者“顶级”钩子调用位于何处 正如我目前对Drupal模块系统的理解,任何模块都能够为另一个模块创建一个钩子来实现。这意味着Drupal的大部分执行是为其他模块实现钩子的模块,而这些钩子又为其他模块提供了要实现的钩子 我不清楚的是,是否有一个初始的、顶级的钩子在引导过程中被调用来启动这个过程,或者是否有几个非模块调用来启动钩子调用过程,或者其他什么(抱歉,这是含糊不清的、新的,但就像我说的,我不明白) 我查看了Php Drupal';s模块钩子调用启动了吗?,php,drupal,drupal-modules,drupal-hooks,Php,Drupal,Drupal Modules,Drupal Hooks,在Drupal7(和Drupal6?)系统中,“启动”钩子调用过程的是什么,或者“顶级”钩子调用位于何处 正如我目前对Drupal模块系统的理解,任何模块都能够为另一个模块创建一个钩子来实现。这意味着Drupal的大部分执行是为其他模块实现钩子的模块,而这些钩子又为其他模块提供了要实现的钩子 我不清楚的是,是否有一个初始的、顶级的钩子在引导过程中被调用来启动这个过程,或者是否有几个非模块调用来启动钩子调用过程,或者其他什么(抱歉,这是含糊不清的、新的,但就像我说的,我不明白) 我查看了\u dr
\u drupal\u bootstrap\u full
函数,最后有一个很有希望的结果
module_invoke_all('init');
然而,我对modules/
文件夹的搜索只找到了一个“init”钩子函数,这似乎不是一个起点
system/system.api.php
1737:function hook_init() {
function hook_init() {
drupal_add_css(drupal_get_path('module', 'book') . '/book.css');
}
所以,这对我来说是模块系统之外的东西启动了整个过程。这是在一个地方发生的,还是在多个地方发生的。这些地方在哪里
我目前不是一个很重的Drupal用户。我所有这些的最终目标是孤立地理解Drupal的模块系统,这样我就可以研究和理解Drupal是如何使用它的模块来构建大多数人认为是Drupal的应用程序的。欢迎任何/所有解释,但我正试图从架构的角度来理解事情。我知道你不需要这些知识来使用Drupal,但是我的大脑已经崩溃了,在我知道基本PHP代码在做什么之前,我不会让我继续前进 module_invoke_all是一切发生的地方 从文档:在实现它的所有已启用模块中调用钩子 Init可能不是一个好的定义,因为很少有人定义它。另外,请记住,钩子被称为钩子,而不是钩子 编辑:
这在D6 node.module中。这是一个从模块代码调用钩子的示例,在本例中是钩子节点类型,带有两个参数。钩子系统是Drupal内部的一个独立系统。它不负责引导。hook_init()只是在引导过程结束时调用的钩子。正如另一个答案所说,可以在流程中的任何时间、任何地点调用模块_invoke_all() 简单地说,在Drupal 7中,index.php中的以下两行负责请求的基本流程:
<?php
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
menu_execute_active_handler();
?>
这可以转化为两个步骤:
有人写了一系列博文来详细描述它,请参见。但是模块系统之外的东西需要调用初始模块,好吗?这就是我想弄明白的。好吧,在你的例子中,什么叫节点类型删除?艾伦:这与回答你的问题几乎无关。您可以编写一个调用函数node_type_delete()的模块,但是所有实现hook_node_type_delete()的模块仍然会触发它们的钩子。Alan:module_invoke_all就是调用node_type_delete的。明白了吗。我的印象是,引导加载了一些全局资源,然后整个系统使用模块实现。显然不是这样。
<?php
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
menu_execute_active_handler();
?>