內容模型

本頁內容

內容模型描述了站台儲存的資訊。在 EmDash 中,模型由集合和欄位組成。資料庫儲存該模型,管理面板使用它來建構編輯者使用的表單。

集合、欄位和條目

集合是一種內容類型,如文章、產品或作者。欄位是該內容的一筆資訊,如標題、內文、價格或作者參照。條目是集合中儲存的一個項目。

例如,一個文章集合可能有以下欄位:

Posts
├── Title          短文字,必填
├── Excerpt        長文字,選填
├── Content        富文字,選填
└── Featured image 圖片,選填

EmDash 還管理每個條目需要的資訊,包括其 ID、公開 slug、發布狀態、作者、建立和更新時間、地區設定和修訂參照。查詢結果將這些標準資訊與集合定義的欄位一起公開。

刪除條目會透過設定其刪除時間將其移到資源回收筒。管理員可以在有人從資源回收筒永久刪除之前還原它。此條目工作流程與刪除欄位或集合不同,後者會變更結構描述並刪除儲存的資料。

一個模型,兩種管理方式

管理員可以在管理面板的內容類型中建立和編輯集合。EmDash 更新資料庫結構描述,內容編輯器在下次載入集合時使用變更。

種子檔案用 JSON 描述一個起始模型。範本使用種子在設定期間建立集合和其他站台資料。團隊也可以在版本控制中保留種子,並在建立另一個環境時套用它。管理面板和種子不會建立單獨的模型;兩者都變更目標資料庫中儲存的模型。

以下種子片段定義了文章範例中的四個自訂欄位:

{
	"version": "1",
	"collections": [
		{
			"slug": "posts",
			"label": "Posts",
			"labelSingular": "Post",
			"fields": [
				{
					"slug": "title",
					"label": "Title",
					"type": "string",
					"required": true
				},
				{ "slug": "excerpt", "label": "Excerpt", "type": "text" },
				{ "slug": "content", "label": "Content", "type": "portableText" },
				{ "slug": "featured_image", "label": "Featured Image", "type": "image" }
			]
		}
	]
}

種子檔案參考涵蓋了衝突處理以及種子可以包含的其他物件,包括設定、分類法、選單、小工具區域、重新導向和範例內容。

變更具有現有內容的模型

新增集合會為新條目建立一個空位置。新增選填欄位會將該欄位新增到每個條目,但現有條目在編輯者或遷移提供值之前沒有值。預設值可以在新增欄位時提供初始值。

標籤、描述、驗證規則、搜尋設定和欄位順序可以在不替換欄位的情況下更新。集合和欄位 slug 是穩定的識別碼:管理面板在建立時設定它們,之後不提供重新命名。

在變更生產中使用的模型之前,請閱讀演進已部署站台的結構描述

TypeScript 宣告

EmDash 可以從資料庫中的模型產生 TypeScript 宣告。宣告將集合名稱和欄位形狀新增到公開查詢函式中,使得對 posts 的查詢傳回 data.titledata.content 和其他欄位已知於 TypeScript 的條目。

在本機開發期間,Astro 整合寫入 emdash-env.d.ts 並在結構描述變更後重新整理它。該檔案是產生的輸出;請編輯內容模型而不是宣告。遠端工作流程可以執行 emdash types 從所選 EmDash 站台寫入 .emdash/types.ts。在變更其表示的模型後重新產生該檔案。

產生的型別幫助程式碼匹配當前結構描述,但不會遷移儲存的內容。模型變更和任何所需的內容遷移仍然是獨立的操作。

相關概念

閱讀集合與欄位了解集合功能和欄位選擇。閱讀管理面板了解編輯器和權限模型。