以下内容仅是一个预览,完整内容请见文尾:
实体的显示分为表单显示和视图显示,前者用于不同情况下的信息输入,后者用于不同情况下的信息展示,本篇很多内容不止用于本篇所讲的表单主题,也是学习drupal视图构建的前置知识。

显示模式:
一个内容实体类型的编辑表单在不同的情况下可能需要不一样,以用户实体做列子,为了吸引用户快速注册,可以提供一个很精简的表单,比如只有用户名和密码,但用户注册后,在个人资料修改页应该提供完整的表单,如时区、头像等,这两种都是用户实体的编辑表单(添加表单可算作编辑表单的特例),却在不同情况下显示不一样,这里“不同情况”也称为不同的“上下文”,drupal用“显示模式”来标识不同的上下文,显示模式相对于实体表单就是实体表单显示模式,通常简称表单模式,同样,在展示一个实体时也会有这种需求,在不同上下文下需要展示的字段、格式可能不同,比如完整展示、rss展示、摘要展示、搜索结果展示等等,实体的展示操作称为视图,因此不同上下文相对于实体的展示就是视图显示模式,简称视图模式,不管是表单模式还是视图模式,都代表着一种上下文,每种模式下有特定的显示方式,显示方式不仅限于前文说到的哪些内容(或称为字段)显示或不显示,还包括内容排序、用什么控件或格式显示等等,这些取决于这种显示模式下的配置。
站点管理员可以在管理后台(/admin/structure/display-modes)为表单或视图定义不同的显示模式,显示模式是相对于实体类型来定义的,在一个实体类型下定义的显示模式不用于其他实体类型,但可用于该实体类型下的所有bundle,因此显示模式的机器名格式如下:
   实体类型id.模式名
在上述后台管理地址仅定义显示模式,只有描述和机器名,并不对定义的显示模式进行具体的显示配置,系统用两个配置实体类型来储存管理员添加的显示模式,实体类型id及定义如下:
entity_form_mode(实体表单模式)
实体类定义:\Drupal\Core\Entity\Entity\EntityFormMode
entity_view_mode(实体视图模式)
实体类定义:\Drupal\Core\Entity\Entity\EntityViewMode
这两个实体类型是很简单的配置实体类型,都继承自以下基类:
\Drupal\Core\Entity\EntityDisplayModeBase
她们的作用只是为要应用显示模式的实体类型建立一个可用的显示模式的标识,并不储存显示配置数据
查看所有的表单显示模式代码如下:
\Drupal::entityTypeManager()->getStorage('entity_form_mode')->loadMultiple();
查看所有的视图显示模式代码如下:
\Drupal::entityTypeManager()->getStorage('entity_view_mode')->loadMultiple();
表单模式以default做默认模式,她并不显示在界面上,表单模式机器名和实体类型表单操作名有些关系(见下),视图模式以full做默认模式,在没有指定显示模式名的情况下,系统会使用默认模式

以上两个实体类型仅是建立显示模式而已,要真正控制表单或视图的显示还需要进一步配置,每一个可使用显示模式的实体类型,她的bundle都可以在本实体类型所定义的某个显示模式下建立一个显示配置,以控制具体的显示行为(在实体类型结构管理的“管理表单显示”和“管理显示”中配置),默认情况下bundle都有一个默认的显示配置对应默认的显示模式,用户自定义的显示模式并没有显示配置,需要在默认显示模式配置页面的“自定义显示设置”中启用并进行配置操作才会有,这些配置数据是储存在以下另外两个配置实体中的:
entity_form_display(储存实体表单的显示配置)
entity_view_display(储存实体视图的显示配置)
她们的配置实体id格式如下:
实体类型id.bundle.模式名
本篇将介绍表单模式配置数据的储存及运用,至于视图模式将在本系列视图构建器主题中介绍。
通过以上的介绍我们应当清楚的知道显示模式名和其下的配置数据是分别由不同的配置实体储存的

能够设置显示模式的实体类型:
并不是所有的实体类型都能够被设置显示模式,条件有两个:
1、实体类型定义中设置了根键field_ui_base_route且值不能为空,这意味着实体类型需要是可字段化实体类型,该键称为字段UI基本路由,通常在释文定义根键中设置或实体类型修改钩子中设置,其值是该实体类型或其bundle的综合管理页路由名,字段ui模块以此路由为基础去动态注册字段管理、表单和视图显示管理等页面的路由,这些动态注册的路由以此基本路由的路径做路径前缀,往往以选项卡的方式和综合管理页并列显示,以集中管理配置实体类型。
2、对于表单模式还需要设置了表单处理器(处理器根键:form),对于视图模式还需要设置了视图构建器(处理器根键:view_builder)。
这些条件意味着只有内容实体类型才能设置显示模式,默认安装中有六个实体类型可以设置,实体类型id如下:
block_content(自定义区块)
comment(评论)
contact_message(联系信息)
node(内容)
taxonomy_term(分类术语)
user(用户)
他们都是内容实体类型(在drupal中内容实体类型继承自可字段化实体类型)

实体显示可配置性及显示选项:
在字段定义对象中有两个方法和显示相关,isDisplayConfigurable方法返回布尔值,表明实体显示是否可以被配置(并非指是否可以显示),true时表明实体显示系统可以指定其他控件或格式化器并配置,换句话说可覆写其默认显示配置,false时...

本篇完整目录如下:
显示模式
能够设置显示模式的实体类型
实体显示可配置性及显示选项
伪字段ExtraField
实体显示知识库
实体表单显示
取得表单显示对象
表单显示配置数据说明
实体显示基类重点方法说明
实体表单显示方法说明
表单显示配置数据的建立
实体表单显示配置编辑表单
补充信息

各位《云客drupal源码分析》系列的读者:
本系列分享希望帮助大家理解drupal底层原理,并缩短学习时间,但部分重点内容在博客仅发布前言和目录,这是因为:drupal在国外如此流行但在国内却很小众,一个重要原因应该是中文资料的缺乏,我们是否能够找到一种方式来激发高质量的中文资料出产?此时同是积极推动者的晴空提出能否用付费阅读的方式来鼓励更多教程作者?并建立了一个付费阅读drupal资料的网站,学习者仅需支付很少费用即可查询到最用心的知识注解,避免大量查找资料,可以节省大量学习时间是划算的,作者也能分配精力去开发高质量内容而得到回报,drupal是精品中的精品,超过一半的世界五百强用她做网站,难能可贵,国内普及初期需要一个良好的土壤,普及开后免费内容会越来越多,为了支持国内发展,云客决定将重点内容放在晴空的这个网站上收费阅读,读者只需要微信支付很少费用即可,云客在这里承诺该系列得到的所有订阅费用全部捐献给drupal深圳社区,用以组织活动等等,发展社区需要大家贡献力量,该网站于2017年3月29日上线,请移步:http://nowicode.com/ 阅读本篇完整版

我是云客,【云游天下,做客四方】,联系方式见主页,欢迎转载,但须注明出处

云客Drupal源码分析之实体表单显示EntityFormDisplay相关推荐

  1. 云客Drupal源码分析之Session进阶

    在本系列之前写过<云客Drupal源码分析之Session系统>,但那部分仅仅讲到了drupal会话的基础:Symfony的Session组件 至于drupal怎么去使用这个基础就是本主题 ...

  2. 云客Drupal源码分析之数据库Schema及创建数据表

    本主题是<云客Drupal源码分析之数据库系统及其使用>的补充,便于查询,所以独立成一个主题 讲解数据库系统如何操作Schema(创建修改数据库.数据表.字段:判断它们的存在性等等),以及 ...

  3. 云客Drupal源码分析之配置系统Configuration(一)

    各位<云客drupal源码分析>系列的读者: 本系列一直以每周一篇的速度进行博客原创更新,希望帮助大家理解drupal8底层原理,并缩短学习时间,但自<插件系统(上)>主题开始 ...

  4. 云客Drupal源码分析之节点实体访问控制处理器

    以下内容仅是一个预览,完整内容请见文尾: 本篇讲解节点实体的访问控制,总结了访问检查链,对"域"."授权id"进行了清晰论述(该知识点可能是中文资料第一次提及, ...

  5. 云客Drupal源码分析之类型化数据Typed Data API

    各位<云客drupal源码分析>系列的读者: 本系列一直以每周一篇的速度进行博客原创更新,希望帮助大家理解drupal底层原理,并缩短学习时间,但自<插件系统(上)>主题开始博 ...

  6. 云客Drupal源码分析之国际化Internationalization:核心翻译系统

    各位<云客drupal源码分析>系列的读者: 本系列一直以每周一篇的速度进行博客原创更新,希望帮助大家理解drupal底层原理,并缩短学习时间,但自<插件系统(上)>主题开始博 ...

  7. 云客Drupal源码分析之前端js中的翻译

    从本主题开始<云客Drupal源码分析>系列将连续发布和前端js相关的内容,如果您对JavaScript还不熟悉或者需要来一次系统性的整理回顾,在此云客为您准备了以下资料: <PHP ...

  8. 云客Drupal源码分析之插件系统(上)

    各位<云客drupal源码分析>系列的读者: 本系列一直以每周一篇的速度进行博客原创更新,希望帮助大家理解drupal底层原理,并缩短学习时间,但自<插件系统(上)>主题开始博 ...

  9. 云客Drupal源码分析之前言

    Drupal是一个非常优秀的网站系统,可以说她是一个网站应用开发框架,也可以说是一个cms,她在世界范围内被广泛使用,最为人所知的是美国白宫.联合国等知名机构的官方网站使用了她,随着Drupal8的来 ...

最新文章

  1. docker 简单入门(一)
  2. python播放本地视频教程_怎样用python播放视频
  3. 【Kali渗透全方位实战】子域名的概念与探测(DNSenum工具和Sublist3r脚本的使用)
  4. The ultimate end-to-end tutorial to create and deploy a fully decentralized Dapp in ethereum
  5. 在struts2中配置自定义拦截器放行多个方法
  6. 光大代付支付有问题解决思路
  7. Django:模型层ORM
  8. 用户奖励体系有哪些反作弊的机制?
  9. UI——day16.交互设计(一)
  10. erdas空间建模_ERDAS空间建模工具介绍
  11. 十大热门编程语言入门难度排名
  12. 视频转GIF动图MATLAB源码
  13. 蓄电池浮充电和均充电
  14. spring boot启动后控制台没有端口信息打印日志也很少
  15. ByVal与ByRef
  16. 计算机网络_选择题(一)
  17. Android从驱动到应用开发实例分析
  18. AG9311/AG9310 Type-C转HDMI设计方案|替代AG9310/AG9311芯片|GSV2201可完全替代兼容AG9310/AG9311
  19. mpc 安全多方计算协议_一文揭秘跨链、密钥管理、合约隐私背后的技术, 你不可不知的安全多方计算(MPC)...
  20. Excel用排序做工资条

热门文章

  1. 捷配pcb经验分享,PCB组装的巨大影响因素——湿度
  2. 2020Android 高级面试题总结(附答案解析)
  3. 为什么数据库排序字段要使用浮点数
  4. python安全开发——内外网收集 Socket子域名DNS
  5. HTML+CSS+JS大作业——汽车设备营销企业模板(13页) 静态HTML网页设计模板
  6. xxxx has no uot-of-line virtual method definitions
  7. 概率质量函数,概率密度函数,累积分布函数的区别
  8. 病毒分析系列2 | 使用PE工具进行初步静态分析
  9. 微信公众号接口之自动回复,根据接收文本回复消息(二)
  10. ubuntu 18 安装supervisor程序实现进程守护