本指南介紹如何使用 EmDash 管理面板建立、編輯和管理內容。
存取管理面板
在瀏覽器中開啟網站的 /_emdash/admin。使用設定時建立的憑證登入。
面板顯示:
- 側邊欄 - 導覽至 Collection、媒體和設定
- 內容列表 - 所選 Collection 中的項目
- 快速操作 - 建立新內容、批次操作
建立內容
-
點擊側邊欄中的 Collection 名稱(如 Posts)
-
點擊 New Post(或對應 Collection 的等效按鈕)
-
填寫必填欄位:
- Title - 內容的顯示名稱
- Slug - URL 識別碼(從標題自動產生,可編輯)
-
使用富文本編輯器新增內容
-
在側邊欄中設定中繼資料:
- Status - 草稿、已發佈或已封存
- 發佈日期 - 何時發佈
- 分類和標籤 - 分類法指派
-
點擊 儲存
草稿僅在管理面板中可見。將狀態變更為已發佈以使內容在網站上可見。
內容狀態
每個項目都有三種狀態之一:
| 狀態 | 可見性 | 用途 |
|---|---|---|
| 草稿 | 僅管理員 | 進行中的工作 |
| 已發佈 | 公開 | 線上內容 |
| 已封存 | 僅管理員 | 已下線內容 |
使用編輯器側邊欄中的下拉選單變更狀態。
富文本編輯器
EmDash 的編輯器支援:
- 標題 - H2 到 H6
- 格式 - 粗體、斜體、底線、刪除線
- 列表 - 有序和無序
- 連結 - 內部和外部
- 圖片 - 從媒體庫插入
- 程式碼區塊 - 帶語法醒目提示
- HTML 區塊 - 用於自訂嵌入和小工具的原始 HTML
- 嵌入 - YouTube、Vimeo、Twitter
- 章節 - 透過
/section指令使用的可重複使用內容區塊
斜線指令
輸入 / 存取快速插入指令:
| 指令 | 操作 |
|---|---|
/section | 插入可重複使用的章節 |
/image | 從媒體庫插入圖片 |
/code | 插入程式碼區塊 |
/html | 插入原始 HTML 區塊 |
鍵盤快速鍵
| 操作 | 快速鍵 |
|---|---|
| 粗體 | Ctrl/Cmd + B |
| 斜體 | Ctrl/Cmd + I |
| 連結 | Ctrl/Cmd + K |
| 復原 | Ctrl/Cmd + Z |
| 重做 | Ctrl/Cmd + Shift + Z |
| 儲存 | Ctrl/Cmd + S |
插入圖片
-
點擊工具列中的圖片按鈕
-
從媒體庫選擇已有圖片,或上傳新圖片
-
新增替代文字(無障礙性必需)
-
調整對齊和大小選項
-
點擊 插入
HTML 區塊
使用 /html 插入原始 HTML 區塊。這對於嵌入第三方小工具、自訂標記或不適合標準區塊類型的內容很有用。從 WordPress 或 Contentful 匯入包含 EmDash 無法轉換為原生 Portable Text 區塊的標記的內容時,也會自動建立 HTML 區塊。
要允許來自其他提供者的 iframe,請在 Portable Text 渲染中覆寫 htmlBlock 元件:
---
// src/components/MyHtmlBlock.astro
import sanitizeHtml from "sanitize-html";
const { node } = Astro.props;
if (!node?.html) {
return null;
}
const sanitized = sanitizeHtml(node.html, {
allowedTags: [...sanitizeHtml.defaults.allowedTags, "img", "span", "iframe"],
allowedAttributes: {
...sanitizeHtml.defaults.allowedAttributes,
"*": ["class", "id", "data-*", "style"],
iframe: ["src", "width", "height", "frameborder", "allow", "allowfullscreen"],
img: ["src", "srcset", "alt", "title", "width", "height", "loading"],
},
allowedIframeHostnames: [
"www.youtube.com",
"player.vimeo.com",
"iframe.videodelivery.net", // Cloudflare Stream
// 在此新增您的提供者
],
});
---
<div class="html-block" set:html={sanitized} />
然後傳遞給 <PortableText>:
---
import { PortableText } from "emdash/ui";
import MyHtmlBlock from "../components/MyHtmlBlock.astro";
---
<PortableText
value={post.data.content}
components={{ type: { htmlBlock: MyHtmlBlock } }}
/>
編輯內容
-
導覽至包含內容的 Collection
-
點擊要編輯的項目
-
進行變更
-
點擊 儲存
對已發佈內容的變更會立即顯示在網站上。
修訂歷史
EmDash 會追蹤內容的變更。從編輯器側邊欄存取修訂歷史:
-
點擊編輯器側邊欄中的 Revisions
-
檢視帶有時間戳記的先前版本列表
-
點擊修訂進行預覽
-
點擊 還原 回復到該版本
還原修訂會用還原的內容建立新的修訂。原始修訂歷史被保留。
批次操作
對多個項目同時執行操作:
-
使用核取方塊在內容列表中選擇項目
-
點擊 批次操作 下拉選單
-
選擇操作:
- 發佈 - 將所有選取項設為已發佈
- 封存 - 將所有選取項設為已封存
- 刪除 - 永久刪除選取項
-
確認操作
搜尋和篩選
搜尋
使用搜尋框按標題或內容尋找。搜尋不區分大小寫,並比對部分字詞。
篩選
按以下條件篩選內容列表:
- 狀態 - 草稿、已發佈、已封存
- 日期範圍 - 建立或修改日期
- 作者 - 內容建立者
- 分類法 - 分類或標籤指派
點擊 清除篩選 重設。
排程發佈內容
安排內容在未來某個日期發佈:
-
建立或編輯內容
-
將狀態設為 草稿
-
將發佈日期設為未來的日期和時間
-
點擊 儲存
當發佈日期到達時,內容會自動發佈。
刪除內容
從編輯頁面或內容列表中刪除內容:
從編輯器
-
開啟要刪除的內容
-
點擊工具列中的 刪除
-
確認刪除
從列表
-
使用核取方塊選擇項目
-
點擊 批次操作 > 刪除
-
確認刪除
內容 API
如需程式化存取,請使用 EmDash 管理 API。
建立內容
以下請求建立一個草稿文章:
POST /_emdash/api/content/posts
Content-Type: application/json
Authorization: Bearer YOUR_API_TOKEN
{
"title": "我的新文章",
"slug": "my-new-post",
"content": "<p>文章內容在這裡</p>",
"status": "draft"
}
更新內容
以下請求更新現有文章並發佈:
PUT /_emdash/api/content/posts/my-new-post
Content-Type: application/json
Authorization: Bearer YOUR_API_TOKEN
{
"title": "更新後的標題",
"status": "published"
}
刪除內容
以下請求永久刪除一篇文章:
DELETE /_emdash/api/content/posts/my-new-post
Authorization: Bearer YOUR_API_TOKEN
翻譯內容
當啟用 i18n 時,可以為任何內容項目建立翻譯。
建立翻譯
-
開啟要翻譯的內容項目
-
在編輯器側邊欄中找到 Translations 面板
-
點擊目標語言旁邊的 翻譯
-
編輯預先填入的內容 — 為新語言調整標題、slug 和正文
-
點擊 儲存
新翻譯與原始項目關聯,並以草稿狀態開始。翻譯準備好後獨立發佈。
在翻譯之間切換
翻譯面板顯示所有已設定的語言。點擊任何現有翻譯旁邊的 編輯 直接導覽。目前語言用勾號標記。
語言篩選
在內容列表中,使用工具列中的語言下拉選單按語言篩選項目。每個項目在專用欄中顯示其語言。
每個翻譯都有自己的 slug、狀態和修訂歷史。可以獨立發佈、排程和管理翻譯。
有關設定、查詢和語言切換器的完整詳情,請參閱國際化指南。