logo

额外区块类型 (EBT) - 全新的布局构建器体验❗

额外区块类型 (EBT) - 样式化、可定制的区块类型:幻灯片、标签页、卡片、手风琴等更多类型。内置背景、DOM Box、JavaScript 插件的设置。立即体验布局构建的未来。

演示 EBT 模块 下载 EBT 模块

❗额外段落类型 (EPT) - 全新的 Paragraphs 体验

额外段落类型 (EPT) - 类似的基于 Paragraph 的模块集合。

演示 EPT 模块 滚动

滚动
03/10/2025, by Ivan

钩子是模块与其他附加模块或 Drupal 核心子系统交互的一种方式。钩子用于各种任务,包括模板文件的预处理变量(hook_preprocess())、修改信息列表(hook_tokens_alter()、hook_views_data_alter())以及操作表单(hook_form_alter())等。在此页面中列出了核心提供的所有钩子。

模块可以定义它们自己的附加钩子。例如,Flag 模块定义了 hook_flag_options_alter(),其他模块可以使用它来修改现有标志的默认选项。大多数定义钩子的模块也会提供相应的文档。这些文档通常位于 *.api.php 文件中。

钩子会出现在执行流程的不同点上,Drupal 会在这些点查找所有已启用模块的贡献。例如,当用户访问 Drupal 网站上的帮助页面时,Drupal 在生成帮助页面时会给每个模块提供机会来展示自己的文档。这是通过扫描所有启用模块是否实现了 hook_help() 来实现的。也就是说,命名为 mymodule_help($route_name, \Drupal\Core\Routing\RouteMatchInterface $route_match) 的函数,其中 “mymodule” 是模块名。例如,Block 模块的帮助钩子叫做 block_help(),Node 模块的帮助钩子叫做 node_help()。钩子还可以提供参数;hook_help 的 $route_name 和 $route_match 参数允许开发人员定义帮助消息应显示在哪些页面上。

钩子可以被看作是事件监听器,事件触发动作。Drupal 中的事件(例如节点删除)会触发 "hook_node_delete" 钩子。如果你的模块实现了 hook_node_delete,这个函数将在节点删除时执行。例如,你的函数可能负责减少节点总数,因此当节点被删除时,该函数会被调用并将总数减少 1。

另请参阅 模块钩子概览(Drupal API 手册)。你可能也会想查看这篇优秀的 文章,它使用简单的 PHP 结构/片段解释了 Drupal 模块/钩子系统的工作原理