你现在的位置:首页 > PHP网站建设知识库 > Drupal > 正文

Drupal模块的钩子系统

什么是模块

drupal模块是一些由PHP编写的有各种功能的文件的集合。由于drupal模块可以在drupal站点内运行,模块将有权访问drupal核心模块的所有变量和方法。事实上,drupal模块无异于普通PHP文件, 可以被独立的建立并运行,并用于各种不同的功能中。

这种体系允许drupal核心模块访问所有自定义模块中的定义的方法(function), 并完善核心模块的功能。自定义代码被激活并引用的地方叫做“钩子”,drupal对它的接口有着严格的定义。

关于“钩子”

所有自定义模块用钩子来与drupal核心模块合作。他们使一个普通自定义模块能够定义自己的url和页面(hook_menu), 能够添加自己的内容到页面(hook_block, hook_footer, etc.),能够建立属于自己的数据库(table)(hook_schema) 等等。这个页面列出了所有由drupal核心模块提供的可应用钩子, 当然, 自定义模块也可以定义自己的钩子。例如cck模块定义了hook_field_info(drupal 6), 它可以被其他模块用来建立自己的内容字段。大多数拥有自定义钩子的模块都有钩子的结束文档可以参考。

drupal在运行时, 将会在不同的情况下查找可以应用的由自定义模块提供的钩子来增加自己的功能,此时钩子便被激活。例如,当一个用户访问了drupal站点的一个页面时, drupal将为所有的模块提供一个显示各个模块的帮助信息的机会。drupal将检查所有的模块代码,查找是不是有类似于mymodule_help($path, $arg)的方法。注: mymodule是该模块的名字。比如block模块的“帮助信息钩子“(help hook)叫做block_help, node模块的“帮助信息钩子”(help hook)叫做node_help. 钩子可以接受参数, 比如hook_help的参数是$path和$arg, 这两个参数允许开发者来决定在那些页面上来显示帮助信息。

钩子可以被理解城一个事件监听器, 由特定的事件所激活。drupal中的事件可以是:
比如一个节点被删除了,它将激活钩子”hook_delete”;如果您的模块包含了hook_delete, 那么您自己方法将在一个节点被删除时执行。例如你可能有一个计算所有节点数的方法,当一个节点被删除时,您将需要hook_delete来执行这个方法,以便在节点总数上减一。