雲客Drupal源碼分析之實體表單顯示EntityFormDisplay

以下內容僅是一個預覽,完整內容請見文尾:
實體的顯示分爲表單顯示和視圖顯示,前者用於不同情況下的信息輸入,後者用於不同情況下的信息展示,本篇很多內容不止用於本篇所講的表單主題,也是學習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/ 閱讀本篇完整版

我是雲客,【雲遊天下,做客四方】,聯繫方式見主頁,歡迎轉載,但須註明出處

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章