Drupal 7 教學課程三:透過案例實作,深入了解 entity

By tky, 7 八月, 2019

在上一集講完 D7 模組與版型的,以及最簡單的 entity 之後,本集開始深入說明各種 entity 的觀念與關係。需要看步驟分解的朋友可以點這裡,看 Powtoon 的投影片模式。

從 Drupal 7 開始,包含原有的內容類型在內,負責不同功能的系統項目都被視作 entity,獲得了可欄位化 (fieldable) 、表單與顯示分離的能力。像是使用者 (user)、分類 (taxonomy)、回應 (comment)、媒體檔案 (media)...等等。

這樣的設計之後延伸到 Drupal 8,進一步把欄位、表單和顯示的設定拆分開來,讓開發者能夠在設計網站時能夠有更大的彈性,自訂欄位束集 (bundle)、表單輸入 (form) 與前端呈現 (display) 三個面向。在學習 D8 之前,學過 D7 會比較容易上手,也更容易理解 D8 的架構改進之處。

在這個教學投影片中,為了讓學員能夠具體而深入理解 entity 的觀念,我設計了一個「課程系統」的功能,要求學員實作出這樣的系統。課程中並非直接告訴學員們要怎麼做,而是要求他們先思考

  1. 這樣的系統通常會告知使用者什麼樣的資訊?這些資訊對應哪些欄位元素?
  2. 這些元素中有哪些可能會重複出現/使用?
  3. 這些元素中有哪些可能會有更豐富的資訊,讓使用者進一步點擊與瀏覽?

由於大學生們常常需要上網選課,對於 1. 是相當熟悉。對於 2. 或 3. 就不太清楚,需要進一步引導與討論才能說出個所以然。

考量到課程系統的各種面向後,學員可以明白光是設計「課程」一種內容類型是不足以涵蓋課程的所有面向,勢必還要設計「教師」、甚至「教室」等多種內容類型,才能有效率地在未來應因內容建置與增生的各種需求。

有了這樣的先備觀念,加上上一堂課介紹過分類項目引用 (term reference) 欄位,就可以順勢介紹 entity reference 這個擴充欄位以及相關模組了(entity api, ctools)。這個時候也可以順便教一下不同模組之間的相依關係 (dependency),讓學員了解「一個功能可能會建立在許多模組的組合上」這件事。

在真正使用 entity reference 欄位之前,先要求學員們建立「授課教師」的內容類型與節點,然後再建立「課程」類型,並在「課程」加入 entity reference 欄位。如此才能在 entity reference 的欄位設定中,指定連結到「授課教師」的內容類型,並在建立「課程」節點時能夠有內容項目可以連結。

如果在實作練習時,學員們能夠按照規格的要求完成實作,那麼就繼續學習使用者 user 這個 entity 的相關設定。比起內容類型,使用者多了「權限」與「角色」的規劃及管理,這方面就需要透過更多實作課程,讓學員理解「建立不同角色、賦予不同權限」這件事。

我會要求他們建立管理員的角色,並賦予最高權限,同時用老師的 email 建立一個有管理員角色的帳號。這樣還有一個好處就是,未來使用 ADD 匯入學員的網站時,不需要再請他們提供自己的帳號密碼,才能登入後台,查看他們是否設定正確。

接著會請學員完成「設定」中「使用者 -> 帳號設定」的全站設定,以及開始自訂 user 的欄位束集。在這一系列的實作之後,學員就會更了解 entity 這個觀念涵蓋到哪些具體的項目上,同時能夠對於「引用」(reference) 的觀念有所掌握,替未來理解與操作 views 打下基礎。

Area