集合定義了一種內容類型以及編輯者用來建立它的表單。集合的欄位定義了每個條目可以包含的值。例如,一個產品集合可以包含標題、價格、描述、產品圖片和對品牌條目的參照。
管理員在內容類型中管理集合。種子檔案可以在從設定配置站台或環境時定義相同的集合設定。
集合識別
每個集合都有一個複數標籤、一個可選的單數標籤和一個 slug。標籤顯示在管理面板中。slug 在查詢、API 路由、種子檔案和資料庫中識別集合。
例如,標記為部落格文章的集合可以使用部落格文章作為單數標籤,posts 作為 slug。然後 Astro 程式碼透過該 slug 進行查詢:
import { getEmDashCollection } from "emdash";
const { entries: posts } = await getEmDashCollection("posts");
在建立集合之前選擇 slug。管理面板不會在之後重新命名集合 slug 或欄位 slug,因為現有查詢和儲存欄位依賴於它們。slug 以小寫字母開頭,僅包含小寫字母、數字和底線,最長 63 個字元。EmDash 還會拒絕其自身路由和條目資料使用的保留名稱。
集合行為
集合設定控制編輯者和公開頁面如何使用條目:
- 可路由要求在條目發布之前有一個公開 slug。URL 模式可以將條目 slug 或 ID 與其發布日期組合以產生公開路徑。
- 草稿允許編輯者在發布前儲存工作。
- 修訂保留內容歷史的快照。
- 預覽為未發布的內容提供簽名預覽 URL。
- 搜尋為標記為可搜尋的欄位啟用全文搜尋。
- SEO 新增標題、描述和圖片中繼資料欄位,並將集合包含在網站地圖中。
- 編輯鎖定在編輯者工作時保留條目,並在鎖定釋放前拒絕其他作者。
- 留言可以按集合啟用,帶有審核和自動關閉設定。
- 群組將集合放入側邊欄的可摺疊資料夾中。具有相同群組的集合共享一個資料夾,定位在第一個出現的位置。當指派給分類法的每個集合都顯示在該資料夾中時,分類法也會加入該資料夾。
啟用站台實際使用的行為。例如,開啟預覽會提供預覽 URL,但 Astro 頁面仍必須正確渲染條目及其預覽狀態。完整流程請參閱預覽模式。
欄位類型
根據編輯者輸入的值和應用程式碼接收的方式選擇欄位類型。EmDash 支援 16 種欄位類型:
| 內容需求 | 欄位類型 | 編輯者使用的控制項 |
|---|---|---|
| 短文字或長文字 | string、text、slug、url | 文字輸入、文字區域和 URL 值 |
| 數字 | number、integer | 小數或整數輸入 |
| 狀態和時間 | boolean、datetime | 開關或日期時間選擇器 |
| 固定選項 | select、multiSelect | 從設定選項中單選或多選 |
| 富文字或結構化資料 | portableText、json、repeater | 富文字、JSON 或子欄位的重複群組 |
| 媒體 | image、file | 從媒體庫中選擇的項目 |
| 關係 | reference | 從另一個集合中選擇的條目 |
類型不僅僅是編輯器控制項。它還決定了 EmDash 如何儲存和驗證值,以及產生的 TypeScript 宣告如何描述它。欄位類型參考列出了每種類型的值形狀和選項。
欄位規則
每個自訂欄位都有一個標籤和一個 slug。以下選項進一步描述其行為:
- 必填阻止在沒有值的情況下儲存條目。
- 唯一阻止集合中的兩個條目使用相同的值。
- 預設值在適當時提供起始值。
- 驗證可以根據欄位類型限制文字長度、數字範圍、模式、選項、檔案類型或重複器長度。
- 可搜尋將支援的文字欄位包含在集合的全文搜尋索引中。
- 已索引為支援的欄位上的排序或篩選建立資料庫索引。
- 可翻譯控制每個地區設定是否有自己的值。不可翻譯的值在同一條目的翻譯之間共享。
當查詢按該自訂欄位排序或篩選時,開啟已索引。索引幫助資料庫找到匹配或排序的條目,但會使用額外儲存,並在每次建立或更新內容時增加工作量。不要僅僅因為頁面顯示了某個欄位就為其建立索引。
索引可用於 string、url、number、integer、boolean、datetime、select、reference 和 slug 欄位。富文字、JSON、重複器和多選值包含更複雜的資料,無法使用這種索引。
參照儲存目標條目的 ID。使用目標集合設定參照,僅當欄位需要保存多個條目 ID 時才啟用多值。參照允許程式碼載入或識別相關內容;它不會將目標條目複製到來源條目中。
後續變更欄位
標籤、驗證、搜尋設定、索引、小工具選項和顯示順序可以在不替換欄位的情況下變更。新增欄位會保留每個現有條目,但如果站台期望某個值,這些條目將需要新欄位的值。
遷移必須轉換現有值、更新模型,並在部署期間保持舊應用程式碼和新應用程式碼的相容性。在進行此類變更之前,請遵循部署站台的結構描述演進。