5.1 实体字段
此时,要创建一个带字段的内容类型最简单的方式是让 Drupal 写配置文件,之后在模块内直接使用这些配置文件。
我们可以看下 Drupal 核心的 YML 文件:
core/profiles/standard/config/install/field.storage.node.field_image.yml
可以看出完全通过手写 YML 文件生成实体字段太繁琐、乏味而且很具挑战性。
本课内容
- 组装 examples/field_example 模块
- 学习 Drupal 7 和 Drupal 8 实体字段的不同
- 研究用模块创建自定义字段
- 研究用模块改变既存的字段
创建“初始导出配置”
在我们通过用户界面管理配置之前,需要把数据库中的默认配置导出到文件系统。
这允许我们更新存储的配置、在不同环境间迁移配置。
确认已更新 Drush 到最新版本后,运行以下指令:
drush config-export
想了解更多 Drush 信息,请查看 Drush based workflow 。
创建一个新的内容类型
之前课程里已经讨论了如何创建内容类型,我们现在要创建一个。
- 确保 Link 模块激活
- 创建新内容类型 External,保存、编辑字段。
- 增加一个新的 Link 字段,命名为 URL、设置数量 1、保存。
- 重复使用 image 字段,命名为 Screenshot、保存。
导航到 /node/add ,你会看到新的内容类型 External 。
什么是 Configuration Manager ?
Configuration Manager 模块提供了一个用户界面,用于导入、导出配置变更,例如在站点的多个实例间分阶段配置数据。
查看配置变更
导航到配置管理部分 /admin/config/development/configuration,你会看到这些信息(见辅助内容区):
拷贝信息,下节会用到。
这些配置文件是什么?
配置文件也就是配置设置,默认存储在数据库内,也可以导出为配置文件。
我们将导出这些设置,在我们模块内使用。
Your current configuration has changed. Changes to these configuration items will
be lost on the next synchronization:
* core.entity_form_display.node.external.default
* core.entity_view_display.node.external.default
* core.entity_view_display.node.external.teaser
* core.extension
* field.field.node.external.body
* field.field.node.external.field_image
* field.field.node.external.field_url
* field.storage.node.field_url
* node.type.external
* user.role.administrator
首先我们和相应的 UI 表单对比看下每个文件是什么:
-
node.type.external
内容类型编辑表单产生的设置
。
路径:/admin/structure/types/manage/external
core.entity_form_display.node.external.default
编辑模式下,定义字段表单组件如何表示的设置
。
路径:/admin/structure/types/manage/external/form-display
core.entity_view_display.node.external.default
默认查看模式下,定义字段如何表示的设置。
路径:
/admin/structure/types/manage/external/display
core.entity_view_display.node.external.teaser
teaser 查看模式下,定义字段如何表示的设置。
field.field.node.external.body
定义字段 body 的设置。field.field.node.external.field_image
定义字段 field_image 的设置。
路径: /admin/structure/types/manage/external/fields/node.external.field_imagefield.field.node.external.field_url
定义字段 field_url 的设置。
路径: /admin/structure/types/manage/external/fields/node.external.field_urlfield.storage.node.field_url
定义字段 field_url 存储的设置。
路径:/admin/structure/types/manage/external/fields/node.external.field_url/storage
field.field 和 field.storage 文件有什么不同?
字段 API 定义了两个主要数据结构 FieldStorage 和 Field ,还有一个绑定概念。
FieldStorage 定义了一种特定的类型数据,隶属于实体。Field 隶属于单独的绑定。
一个绑定也可以理解为关联到一个可字段化实体类型的一组字段。
要了解更多关于绑定、字段和实体类型知识请查看 An Introduction to Entities。