Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Drupal';s模块钩子调用启动了吗?_Php_Drupal_Drupal Modules_Drupal Hooks - Fatal编程技术网

Php Drupal';s模块钩子调用启动了吗?

Php Drupal';s模块钩子调用启动了吗?,php,drupal,drupal-modules,drupal-hooks,Php,Drupal,Drupal Modules,Drupal Hooks,在Drupal7(和Drupal6?)系统中,“启动”钩子调用过程的是什么,或者“顶级”钩子调用位于何处 正如我目前对Drupal模块系统的理解,任何模块都能够为另一个模块创建一个钩子来实现。这意味着Drupal的大部分执行是为其他模块实现钩子的模块,而这些钩子又为其他模块提供了要实现的钩子 我不清楚的是,是否有一个初始的、顶级的钩子在引导过程中被调用来启动这个过程,或者是否有几个非模块调用来启动钩子调用过程,或者其他什么(抱歉,这是含糊不清的、新的,但就像我说的,我不明白) 我查看了\u dr

在Drupal7(和Drupal6?)系统中,“启动”钩子调用过程的是什么,或者“顶级”钩子调用位于何处

正如我目前对Drupal模块系统的理解,任何模块都能够为另一个模块创建一个钩子来实现。这意味着Drupal的大部分执行是为其他模块实现钩子的模块,而这些钩子又为其他模块提供了要实现的钩子

我不清楚的是,是否有一个初始的、顶级的钩子在引导过程中被调用来启动这个过程,或者是否有几个非模块调用来启动钩子调用过程,或者其他什么(抱歉,这是含糊不清的、新的,但就像我说的,我不明白)

我查看了
\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();
    ?>