本指南介绍如何使用 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、状态和修订历史。可以独立发布、安排和管理翻译。
有关配置、查询和语言切换器的完整详情,请参见国际化指南。