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 。

创建一个新的内容类型

之前课程里已经讨论了如何创建内容类型,我们现在要创建一个。

  1. 确保 Link 模块激活
  2. 创建新内容类型 External,保存、编辑字段。
  3. 增加一个新的 Link  字段,命名为 URL、设置数量 1、保存。
  4. 重复使用 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_image
  • field.field.node.external.field_url
    定义字段 field_url 的设置。
    路径: /admin/structure/types/manage/external/fields/node.external.field_url
  • field.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

评论 (写第一个评论)