有时候,当你从自定义模块中导出内容类型时,你还可以为该内容类型添加相关的字段。能够自动创建字段使你能够在多个站点上删除并重新安装模块,而不会留下多余的字段,并确保你不会忘记添加它们。我们将介绍两种方法来将这些字段添加到你的代码库中。
前提条件
- 已安装 Drupal 8.0.x。
- 有一个自定义模块(在本例中模块名称为 foobar)。
- 模块中有一个自定义内容类型(请按照父页面中的说明操作。内容类型名称为 Car Brand)。
为我们的内容类型添加额外字段
有两种方法可以完成这一步。你可以使用用户界面来创建字段并将配置导出为文件,或者你可以直接自己编写文件。我喜欢使用第一种方法,只是为了确保不会遗漏 Drupal 添加字段时所需的任何内容,不过导出的字段会以 “field_” 开头,而不是 “foobar_car_brand_”,以便将它们绑定到我们的自定义内容类型。在本页中,我们将介绍如何在自定义模块中手动编写字段代码。
在你的模块中手动编写字段代码
有时,当你从自定义模块中提取内容类型时,你还可以为该内容类型添加相关的字段。自动创建字段的功能允许你在多个站点上删除并重新安装时,不会留下多余的字段,并确保你不会忘记添加它们。我们将介绍两种将这些字段添加到代码库的方法。
前提条件
- 已安装 Drupal 8.0.x。
- 有一个自定义模块(在此示例中使用的模块名称为 foobar)。
- 在模块中有一个自定义内容类型(请按照父页面中的说明进行操作。内容类型的名称为“汽车品牌”)。
向我们的内容类型添加额外字段
有两种方法可以完成此步骤。你可以使用用户界面来创建字段并将配置导出到文件,或者你也可以自己编写文件。我喜欢使用第一种方法,只是为了确保不会遗漏 Drupal 添加字段到内容类型所需的任何内容,不过字段会以“field_”开头导出,而不是“foobar_car_brand_”,用来将它们与我们的自定义内容类型关联。在本页中,我们将介绍使用用户界面来创建字段并导出代码的方法,然后在自定义模块中使用这些代码。
使用 UI 创建字段
如前所述,此方法更适合不太熟悉 Drupal 添加字段到内容类型所需要求的用户。
显著改进
- Entity API 现在实现了 Typed Data API
在这个新的 Entity API 实现中,一切都是基于相同 API 的字段,因此实体是可预测和一致的。
理解 Drupal 的数据模型
首先,在我们深入了解 Typed Data API 本身之前,我们需要理解 Drupal(Entity API)过去如何看待数据模型。这一点很重要,因为 Typed Data API 就是从这里衍生出来的,而 Entity API 正是为它开发的系统之一。
实体是一种复杂的数据,由其他数据片段组成,比如带有条目列表的字段。字段条目本身也是复杂的——它由更多的数据片段组成,例如文本值和输入格式。然而,这种复杂性最终会归结为某种原始数据类型,比如字符串或整数。
下面是 Drupal 7 的简化示例(示例中没有语言键,因为 Drupal 8 的处理方式不同):
示例 1
初始占位页面,只是为了大致勾勒出我们需要的不同子页面。
Content entities 必须通过为实体类提供定义来显式定义其所有字段。字段定义基于 Typed data API(参见 实体如何实现它)。
字段定义
实体类型在实体类的静态方法中定义它们的基本字段。基本字段是不可配置的字段,它们在给定实体类型中始终存在,例如节点的标题或创建和修改日期。实体管理器通过调用 hook_entity_field_info() 和 hook_entity_field_info_alter() 来补充模块提供的可配置和不可配置字段。通过 Field UI 配置的字段也是这样添加的(这些钩子在新的 API 中已不存在)。
显示模式
显示模式(可在 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
概览
Drupal 8 自带一个庞大的基础类库,让你可以处理自己的内容。当涉及到内容实体时,你会希望使用字段。理解字段非常重要,因为实体的数据就是保存在字段里的。
FieldTypes
核心字段类型:
Этот教程最初发布在 Web Wash。不过 Berdir 问我能否在这里发布,所以这就是它。
Drupal 7 的一个模块允许在字段中存储代码示例/片段。它带有一个名为「片段字段」的自定义字段,并显示三个表单元素:描述、源代码和语法高亮模式(选择编程语言)。
但现在是时候将模块升级到 Drupal 8 了。
在本教程中,我将向你展示我是如何在 Drupal 8 中创建一个「基础」自定义字段的。我不会深入讲解 PSR – 4、注解 或 插件,否则教程会过于庞大。
相反,我会添加指向其他网站的链接,这些网站会更深入解释这些概念。
另外,如果你正在寻找 Drupal 8 Field API 的详细文档,请查看以下系列文章: