
在本教程中,我们将学习如何通过自定义模块在 Drupal 8 中编程输出块。
代码示例可以在 GitHub 上查看:
https://github.com/levmyshkin/drupalbook8
首先,我们通过添加一个包含 PHP 类的文件开始,这是通过自定义模块在 Drupal 中创建块的方式。创建文件的过程与我们为页面所做的类相同,如我们之前所做的:
9.3. 创建一个自定义 Drupal 模块。编程输出页面。
我们只需要为插件创建一个文件:
modules/custom/drupalbook/src/Plugin/Block/FirstBlock.php


在本教程中,我们将处理 Drupal Form API,并为模块创建一个设置表单。我们已经创建了用于显示页面和块的模块,现在让我们创建一个配置表单,用于存储连接到某个条件服务的数据。假设我们需要在站点上存储 API 密钥和 API 客户端 ID,例如用于 Google Maps API。
代码示例可以在 GitHub 上查看:
https://github.com/levmyshkin/drupalbook8
我们可以将这些数据存储在 settings.php 中,并将这些设置添加到 git 中。但这样做不安全,存储对服务的访问权限最好存在数据库中。
现在让我们为表单添加另一个路由:


在之前的一节课中,我们已经了解了钩子(hooks)的概念,在本节课中,我们将实践使用 hook_form_alter() 钩子,并向现有表单添加功能。
代码示例可以在 GitHub 上找到:
https://github.com/levmyshkin/drupalbook8
在本节课中,我们将开始实践钩子的使用,稍后我们将回到钩子并查看其他一些示例。现在,让我们从 hook_form_alter() 开始。
为了向模块中添加钩子,我们需要创建一个名为 MODULENAME.module 的文件,因此我们将创建一个名为 drupalbook.module 的文件。这个文件将是一个 PHP 文件,我们的钩子和辅助函数将存储在其中,其余的最好将文件和类放在 src 文件夹中。现在,你只需要在文件中添加一个开头标签:


在本文中,我们将继续学习 Drupal 8 的表单 API,并创建一个多步骤表单。我们已经为模块创建了常规配置表单,使用 $form_state 来存储步骤之间的数据,类似的方式也可以用于创建多步骤表单。
代码示例可以在 GitHub 上找到:
https://github.com/levmyshkin/drupalbook8
对于一个多步骤表单,你需要添加一个表单类:
/modules/custom/drupalbook/src/Form/MultiStepForm.php


Drupal 中的配置是所有内容类型、字段、配置表单和变量设置的基础。通过配置,我们可以将一个站点的更改转移到另一个站点,同时开发不同的功能而互不干扰。
配置可以上传到 YML 文件,并添加到 Git 仓库中,这样你就可以提交站点设置的更改并将其传输到 Dev 或 Live 环境中。Drupal 中的配置概念类似于 Features 模块的工作方式:
https://www.drupal.org/project/features
只是 Features 并没有与所有模块集成,并且并不总是能够通过 Features 迁移所有站点设置。而 Drupal 中的配置可以处理所有设置并允许将所有内容上传为文件。
安装 Drupal 时,系统会创建一个用于上传配置的文件夹。默认情况下,这是一个位于 sites/default/files 中的长文件夹名称:


当你将配置从一个站点导入到另一个站点时,有些配置需要输出内容,但配置内容本身不包含任何内容。在本教程中,我们将解释如何将区块、节点和分类术语从一个站点转移到另一个站点。
让我们在一个站点上创建一个区块,并将配置转移到另一个站点,你可以在上一篇文章中查看如何将配置从一个站点转移到另一个站点:9.9. 在 Drupal 中使用配置。激活、同步配置,从 DEV 到 LIVE 迁移配置。 激活、同步配置,从 DEV 到 LIVE 的配置迁移。


在开发和生产实例中,访问第三方服务的配置经常需要不同。为了通过配置实现这一点,你需要使用配置分割(Configuration Split)模块:
https://www.drupal.org/project/config_split
启用配置分割模块后,你将能够为不同实例指定文件夹。让我们进入配置模块的配置分割设置页面:
/admin/config/development/configuration/config-split
现在让我们为本地、开发和生产实例添加配置分割设置。


在本文中,我们将了解 Drupal 中字段是如何工作的,为什么它们是必需的,以及字段如何帮助我们快速开发 Drupal 网站。
在之前的文章中,我们已经处理过字段:


在本教程中,我们将了解链接模块的字段小部件(Field Widget)是如何工作的。这是一篇概述性文章,因此如果你想开始编写你自己的字段小部件,请跳到后续的文章。
在上一课中,我们为节点和区块添加了链接字段。现在,让我们来看一下链接字段的表单是如何构建的。
我们已经接触过在 Drupal 中的 PHP 类自动加载,同时也有一个用于字段的小部件基类 WidgetBase:
core/lib/Drupal/Core/Field/WidgetBase.php
通过在模块中创建一个新的子类并将其放入 src/Plugin/Field/FieldWidget 目录下,该类会自动连接并可以用于字段。我们来看一下链接字段的小部件类:
core/modules/link/src/Plugin/Field/FieldWidget/LinkWidget.php
类注释包含了该小部件可用于的字段类型:


在本文中,我们将讨论字段格式化器(Field Formatters),它们允许我们编辑字段的显示方式并将其显示在页面上。
在之前的文章中,我们创建了链接字段类型(Link),在本文中,我们将探讨这些字段如何显示在页面上,以及哪个类负责显示它们。通过 Drupal 添加的每个字段都可以在页面上显示,并且可以在页面的“管理显示”中编辑其设置。
在“格式”列中,您可以选择如何显示字段。该列是通过字段格式化器类(Field Formatter classes)形成的。我们来看一下 Link 模块中的类,它负责将链接显示到页面:
core/modules/link/src/Plugin/Field/FieldFormatter/LinkFormatter.php
类注释显示了该格式化器所属的字段类型。
