Views 模块在 Drupal 生态系统中被广泛使用。内容列表、表格、区块、幻灯片、数据导出 —— 这些内容通常都是通过 Views 来显示的。如果你使用内容类型(Content types)、区块类型(Block types)或其他实体类型(Entity types),那么 Views 已经自动与它们集成,你可以直接用 Views 来展示你的内容。但对于你自定义的模块,如果你使用了单独的自定义数据库表(通过 hook_schema() 创建),那么你需要为 Views 编写集成代码,才能在 Views 模块的 UI 中展示你模块的数据。
让我们看看模块 Did this help 与 Views 的集成:
https://www.drupal.org/project/did_this_help
该模块创建了自己的数据库表来存储数据。在这张表中有字符串、ID、日期,因此我们需要为 Views 集成定义不同的处理器(handlers):
在上一篇文章中,我们研究了如何将 Views 模块与自定义数据库集成,用于 Did this help? 模块:
https://www.drupal.org/project/did_this_help
在这篇文章中,我们将覆盖 Choice (yes/no) 字段的 Views 过滤器:

有些人认为 Drupal 是一个复杂的平台,很难安装和设置。但 Drupal 已经持续活跃开发超过 20 年,在这段时间里,所有安装和设置 Drupal 的方法都在不断改进。现在你可以在虚拟环境中通过 Docker 安装 Drupal。让我们使用 Lando,在 10 分钟内安装 Drupal。
首先我们需要安装一个运行 Drupal 的 Web 服务器。但如果从零搭建 Web 服务器(拆分成不同的组件和包),会花费超过 10 分钟的时间,所以我们将使用一个开箱即用的解决方案——解压带有 Docker 的虚拟机。这个虚拟机的运行速度和本地 Web 服务器一样快,没有虚拟化的性能损失。
要在虚拟环境中设置 Web 服务器,我们需要使用 Docker 和 Lando。首先安装 Docker。
安装 Docker
你需要从官方网站下载 Docker:
当我们使用 Drupal 并且需要在自定义模块中使用贡献模块或核心模块的代码时,我们会使用 hook(钩子)和 services(服务)。我们已经在这篇文章中使用过钩子:
现在让我们来了解一下 services。Service 是一个 PHP 对象。因此,当你在自定义模块中创建一个新的 PHP 类时,最好立即将其设计为 service,这样以后你的代码就可以在其他模块中以标准方式使用。
Drupal 将所有的 services 收集到一个 PHP 对象 Service Container 中,所以 Drupal 会在一个地方保存关于所有可用和已使用的服务的信息。你可以调用这个对象并查看有哪些服务正在使用:
在上一篇文章中,我们已经介绍了什么是 Dependencies Injection:
12.15. Services 和 Dependency Injection
在本文中,我们将展示一个控制器中使用 Dependency Injection 的代码示例。
/modules/custom/drupalbook/src/Controller/ModalFormContactController.php:
在之前的文章中,我们已经讨论了什么是 Services、Dependency Injection (DI),以及如何在控制器中使用它们:
12.15. Services 和 Dependency Injection
12.15.1. 控制器中的 Dependency Injection
在本文中,我们将演示如何通过 DI 向区块类中添加服务:
/modules/custom/drupalbook/src/Plugin/Block/CartBlock.php:
在之前的文章中,我们已经讨论了什么是 Services、Dependency Injection (DI),以及如何在控制器和区块中使用它们:
12.15. Services 和 Dependency Injection
12.15.1. 控制器中的 Dependency Injection
12.15.2. 区块中的 Dependency Injection
在本文中,我们将演示如何通过 DI 向继承自 FormBase 的表单类中添加服务:
在之前的文章中,我们已经讨论了什么是 Services、Dependency Injection (DI),以及如何在控制器、区块和表单中使用它们:
12.15. Services 和 Dependency Injection
12.15.1. 控制器中的 Dependency Injection
12.15.2. 区块中的 Dependency Injection
12.15.3. BaseForm 中的 Dependencies Injection
在本文中,我们将展示如何通过 DI 向继承自 ConfigFormBase 的配置表单类中添加服务:
在之前的文章中,我们已经讨论了什么是 Services、Dependency Injection (DI),以及如何在控制器、区块和表单中使用它们:
欢迎来到 EBT 文档。Extra Block Types (EBT) 模块是一系列受 Guttenberg、Elementor、WP Bakery 页面构建器启发的 Drupal 模块。结合 Layout Builder,这些模块让构建落地页变得毫不费力。
作为 Drupal 网站构建者或开发者,您知道区块是任何网站的基本构建单元。然而,Drupal 提供的标准区块类型在创建自定义布局和设计时可能有限。
Extra Block Types (EBT) 是一组 Drupal 模块,它们通过提供新的强大区块类型来扩展 Drupal 区块系统的能力。使用 EBT,您可以创建包含丰富内容、动态布局和高级功能的自定义区块,否则这些功能需要自定义代码或多个模块才能实现。
以下是可用的 EBT 模块列表: