logo

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

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

演示 EBT 模块 下载 EBT 模块

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

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

演示 EPT 模块 滚动

滚动
30/09/2025, by Ivan

有时候,当你从自定义模块中导出内容类型时,你还可以为该内容类型添加相关的字段。能够自动创建字段使你能够在多个站点上删除并重新安装模块,而不会留下多余的字段,并确保你不会忘记添加它们。我们将介绍两种方法来将这些字段添加到你的代码库中。

前提条件

  • 已安装 Drupal 8.0.x。
  • 有一个自定义模块(在本例中模块名称为 foobar)。
  • 模块中有一个自定义内容类型(请按照父页面中的说明操作。内容类型名称为 Car Brand)。

为我们的内容类型添加额外字段

有两种方法可以完成这一步。你可以使用用户界面来创建字段并将配置导出为文件,或者你可以直接自己编写文件。我喜欢使用第一种方法,只是为了确保不会遗漏 Drupal 添加字段时所需的任何内容,不过导出的字段会以 “field_” 开头,而不是 “foobar_car_brand_”,以便将它们绑定到我们的自定义内容类型。在本页中,我们将介绍如何在自定义模块中手动编写字段代码。

在你的模块中手动编写字段代码

30/09/2025, by Ivan

有时,当你从自定义模块中提取内容类型时,你还可以为该内容类型添加相关的字段。自动创建字段的功能允许你在多个站点上删除并重新安装时,不会留下多余的字段,并确保你不会忘记添加它们。我们将介绍两种将这些字段添加到代码库的方法。

前提条件

  • 已安装 Drupal 8.0.x。
  • 有一个自定义模块(在此示例中使用的模块名称为 foobar)。
  • 在模块中有一个自定义内容类型(请按照父页面中的说明进行操作。内容类型的名称为“汽车品牌”)。

向我们的内容类型添加额外字段

有两种方法可以完成此步骤。你可以使用用户界面来创建字段并将配置导出到文件,或者你也可以自己编写文件。我喜欢使用第一种方法,只是为了确保不会遗漏 Drupal 添加字段到内容类型所需的任何内容,不过字段会以“field_”开头导出,而不是“foobar_car_brand_”,用来将它们与我们的自定义内容类型关联。在本页中,我们将介绍使用用户界面来创建字段并导出代码的方法,然后在自定义模块中使用这些代码。

使用 UI 创建字段

如前所述,此方法更适合不太熟悉 Drupal 添加字段到内容类型所需要求的用户。

30/09/2025, by Ivan

显著改进

在这个新的 Entity API 实现中,一切都是基于相同 API 的字段,因此实体是可预测和一致的。

理解 Drupal 的数据模型

首先,在我们深入了解 Typed Data API 本身之前,我们需要理解 Drupal(Entity API)过去如何看待数据模型。这一点很重要,因为 Typed Data API 就是从这里衍生出来的,而 Entity API 正是为它开发的系统之一。

实体是一种复杂的数据,由其他数据片段组成,比如带有条目列表的字段。字段条目本身也是复杂的——它由更多的数据片段组成,例如文本值和输入格式。然而,这种复杂性最终会归结为某种原始数据类型,比如字符串或整数。

下面是 Drupal 7 的简化示例(示例中没有语言键,因为 Drupal 8 的处理方式不同):

示例 1

30/09/2025, by Ivan

Content entities 必须通过为实体类提供定义来显式定义其所有字段。字段定义基于 Typed data API(参见 实体如何实现它)。

字段定义

实体类型在实体类的静态方法中定义它们的基本字段。基本字段是不可配置的字段,它们在给定实体类型中始终存在,例如节点的标题或创建和修改日期。实体管理器通过调用 hook_entity_field_info() 和 hook_entity_field_info_alter() 来补充模块提供的可配置和不可配置字段。通过 Field UI 配置的字段也是这样添加的(这些钩子在新的 API 中已不存在)。

30/09/2025, by Ivan

显示模式

显示模式(可在 admin/Structure/Display-Mode 中管理)用于提供内容实体在查看或编辑时的不同展示方式。显示模式有两种类型——“视图模式”和“表单模式”。这两种显示模式——视图模式和表单模式——都是“配置对象”的示例。下面是一个导出的视图模式示例。

uuid: 15dc7aa9-13fd-4412-9c06-06d09f915d08
langcode: en
status: false
dependencies:
  module:
    - node
id: node.full
label: 'Full content'
targetEntityType: node
cache: true

来源: core.entity_view_mode.node.full.yml

30/09/2025, by Ivan
Этот教程最初发布在 Web Wash。不过 Berdir 问我能否在这里发布,所以这就是它。

Drupal 7 的一个模块允许在字段中存储代码示例/片段。它带有一个名为「片段字段」的自定义字段,并显示三个表单元素:描述、源代码和语法高亮模式(选择编程语言)。

但现在是时候将模块升级到 Drupal 8 了。

在本教程中,我将向你展示我是如何在 Drupal 8 中创建一个「基础」自定义字段的。我不会深入讲解 PSR – 4注解插件,否则教程会过于庞大。

相反,我会添加指向其他网站的链接,这些网站会更深入解释这些概念。

另外,如果你正在寻找 Drupal 8 Field API 的详细文档,请查看以下系列文章: