新闻详情

新闻详情

首页 / 资讯中心 / 详情

Payload 如何配置草稿自动保存(Autosave)并只手动发布

发布时间:2026/9/10 22:06:16来源:尧图网络
Payload 如何配置草稿自动保存(Autosave)并只手动发布
Payload 如何配置草稿自动保存Autosave并只手动发布【免费下载链接】payloadPayload is the open-source, fullstack Next.js framework, giving you instant backend superpowers. Get a full TypeScript backend and admin panel instantly. Use Payload as a headless CMS or for building powerful applications.项目地址: https://gitcode.com/GitHub_Trending/pa/payload在 Payload 中管理内容时常见的诉求是编辑器在后台持续改动文档改动自动以草稿形式保存、随时不丢但对外的“线上版本”只有在你显式点击发布后才更新。本文基于 Payload 仓库自带文档Autosave、Drafts、Versions说明如何完成这条路径开启 Versions Drafts Autosave让编辑过程按固定间隔自动存为草稿并用访问控制保证只有已发布内容对外可见发布动作只能由人手动触发。适用前提来自 Installation任一 JavaScript 包管理器pnpm、npm 或 yarn 2pnpm 优先不支持 yarn 1.xNode.js24.15.0、Next.js16.2.6、TypeScript6.0.3任一兼容数据库MongoDB、Postgres 或 SQLite及对应 Database Adapter。新建项目可直接运行npx create-payload-app并按提示操作在已有 Next.js 应用中集成则按安装文档安装payload、payloadcms/next和数据库适配器。下文以仓库中的空白模板为例其集合定义位于src/collections/目录如 TagsPayload 配置入口是payload.config.tsConfig Overview。开启 Drafts 并启用 Autosave文档明确说明Autosave 依赖 Versions 和 Drafts 同时启用才能工作。而 Versions 虽然默认开启但 Drafts 默认是关闭的Versions Overview 指出 versions 默认启用、maxPerDoc: 100、drafts 禁用。因此你不能只开 autosave必须在集合或 Global 配置里显式写出versions.drafts再在其中开启autosave。以模板里的Tags集合为对象在 Tags.ts 中补充versions配置import type { CollectionConfig } from payload export const Tags: CollectionConfig { slug: tags, admin: { useAsTitle: name, }, fields: [ { name: name, type: text, required: true, }, ], versions: { drafts: { autosave: true, }, }, }autosave可以传true也可以传对象来定制两个属性Autosave 文档选项说明interval自动保存的防抖间隔毫秒。文档更新在此间隔上被 debounced默认800。showSaveDraftButton设为true后即使开启了 autosave 也显示 Save as draft 按钮。默认false。需要自定义时的写法取自文档示例versions: { drafts: { autosave: { interval: 1500, // 自动保存间隔毫秒 showSaveDraftButton: true, }, }, }Collections 和 Globals 支持完全相同的 autosave 配置项。只让已发布内容对外可见开启 Drafts 后Payload 会向 schema自动注入一个_status字段用于标记文档是draft还是publishedDrafts 文档。Admin UI 会把文档显示为三种状态之一Draft—— 从未发布过只存在草稿版本Published—— 已发布且没有更新的草稿Changed—— 已发布但存在尚未发布的更新草稿。这里有一个容易踩的边界draft参数本身不会把_status: draft的文档从 API 结果里挡掉。未登录用户能否看到草稿必须靠read访问控制来约束Access Control。典型写法是登录用户可读全部文档未登录用户只能读_status为published的文档import type { CollectionConfig } from payload export const Tags: CollectionConfig { slug: tags, access: { read: ({ req }) { // If there is a user logged in, // let them retrieve all documents if (req.user) return true // If there is no user, // restrict the documents that are returned // to only those where _status is equal to published return { _status: { equals: published, }, } }, }, versions: { drafts: { autosave: true, }, }, }文档同时提醒了一个真实限制如果你的集合里已有存量文档在开启草稿功能之前创建的这些文档在重新保存之前不会有_status字段。对这类集合访问控制需要同时放行_status为published与_status不存在的文档read: ({ req }) { if (req.user) return true return { or: [ { _status: { equals: published, }, }, { _status: { exists: false, }, }, ], } }手动发布只有显式设置_status: published才上线Autosave 不会触碰已发布的线上文档——它只是把编辑进度存成新的草稿版本发布完全由你决定。文档给出的规则是发布必须显式地把_status: published写进 data反过来把_status设为draft即“取消发布”。Admin UI 侧的行为Drafts 文档开启 Drafts 后原来的 Save 按钮会被替换为“保存草稿”与“发布”操作已发布文档的侧边栏顶部会出现 unpublish 按钮把当前发布文档退回草稿状态已发布后又存了草稿时会出现 revert to published 按钮用于丢弃草稿改动、回到已发布状态草稿版本仍保留只是新增一条反映最后发布状态的版本。如果希望通过角色限制谁能发布可在update访问控制中返回针对_status的查询约束当约束阻止发布时Admin UI 会自动隐藏 Publish 和 Unpublish 按钮例如管理员return true编辑只能更新_status为draft的文档。API 侧draft参数与_status的组合行为以 Drafts 文档的 Quick reference 表 为准与“只手动发布”最相关的几行是操作draft参数data 中的_status结果Updatetrue省略或draft只更新 versions 表主集合文档不变Updatetruepublished主集合被更新为_status: published覆盖行为Updatefalse或省略published主集合被更新为_status: published即带draft: true的 update 只会写 versions 表线上主文档保持不变——这正是 autosave 生效时的写入方式。验证配置是否生效按文档描述可以从三处确认1. Admin UI 的自动保存指示器。开启 Autosave 后文档被修改时草稿会自动创建Admin UI 在侧边栏右上角增加一个指示器说明文档最后一次保存的时间。编辑后观察该指示器是否随时间推进即可判断 autosave 在按interval工作。2. 版本存储位置与形态。启用 versions 后数据库会按slug自动创建版本集合命名模式为_slug_versions例如tags_versions见 Versions Overview。每条版本记录包含parent父文档 ID、完整的文档数据副本以及一个autosave元属性用于标记该版本是否由自动保存产生文档示例中的版本数据节选{ _id: 61cf752c19cdf1b1af7b61f1, parent: 61ce1354091d5b3ffc20ea6e, autosave: false, version: { // your documents data goes here }, createdAt: 2021-12-31T21:25:00.99200:00, updatedAt: 2021-12-31T21:25:00.99200:00 }注意存储策略Autosave不会每次防抖触发都新建一条版本而是只创建一条autosave 版本、之后每次自动保存都更新这一条。文档给出的理由是 autosave 约按 800ms 间隔触发逐次建版本会迅速把_versions集合刷满。3. 读取行为对照。文档明确了验证读结果的方式普通find/findByID不带draft参数返回主集合中的已发布文档忽略草稿版本传入draft: true时返回 versions 表中最近的一条版本草稿或已发布均可能。REST 形式来自 Drafts 文档// REST API写入草稿 POST /api/tags?drafttrue // Local API await payload.create({ collection: tags, data: { // your data here }, draft: true, })查看版本历史还可以走 Versions 文档列出的 REST 端点例如集合的GET /api/{collectionSlug}/versions分页查询版本、GET /api/{collectionSlug}/versions/:id、POST /api/{collectionSlug}/versions/:id恢复某个版本Local API 对应payload.findVersions/findVersionByID/restoreVersion。限制与已知边界前置依赖不可省略Autosave 依赖 Versions 和 Drafts 启用Drafts 依赖 Versions 启用。Versions 虽默认开启maxPerDoc: 100可用0保存全部版本但 drafts 默认关闭必须显式配置versions.drafts。draft: true不绕过必填校验要保存不完整文档靠的是draft: true放宽必填字段而不是设置_status: draft。存量文档开启草稿前已存在的文档在重新保存前没有_status访问控制需按上文示例兼容这种情况。定时发布是独立开关versions.drafts.schedulePublish需要应用具备处理 Jobs 的机制才能执行定时任务与本文的“手动发布”目标无关不需要时不要启用。配置完成后编辑流即为Admin UI 编辑文档 → 每interval默认 800ms防抖后自动写入单一 autosave 草稿版本、侧边栏显示最后保存时间 → 普通 API 读取始终只返回已发布内容 → 由人显式发布_status: published或 UI 的 Publish 按钮后线上版本才更新。【免费下载链接】payloadPayload is the open-source, fullstack Next.js framework, giving you instant backend superpowers. Get a full TypeScript backend and admin panel instantly. Use Payload as a headless CMS or for building powerful applications.项目地址: https://gitcode.com/GitHub_Trending/pa/payload创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Regression test for 14334 2026/9/10 22:48:21

Regression test for 14334

Regression test for #14334 【免费下载链接】ruff An extremely fast Python linter and code formatter, written in Rust. 项目地址: https://gitcode.com/GitHub_Trending/ru/ruff Regression test for this issue. base.py: # error: [invalid-base] class Base(…

阅读更多 →
Diffusers 中 HunyuanVideoTransformer3DModel 全面解析:从架构原理到视频生成实战 2026/9/10 22:48:21

Diffusers 中 HunyuanVideoTransformer3DModel 全面解析:从架构原理到视频生成实战

Diffusers 中 HunyuanVideoTransformer3DModel 全面解析:从架构原理到视频生成实战 【免费下载链接】diffusers 🤗 Diffusers: State-of-the-art diffusion models for image, video, and audio generation in PyTorch. 项目地址: https://gitcode.com…

阅读更多 →
多媒体技术如何重塑沉浸式展览体验 2026/9/10 22:48:21

多媒体技术如何重塑沉浸式展览体验

1. 数字融合时代的展览展示变革 当观众走进上海某科技馆的"深海探秘"展厅,眼前的景象让人惊叹:巨大的弧形屏幕上,鲸鱼正从头顶游过,脚下的地面随着海洋深度变化呈现不同光影效果,耳边环绕着深海生物发出的奇…

阅读更多 →
OmniRoute 国际化(i18n)工程指南:30+ 语言的 UI 与文档翻译、增量管线与自动化 QA 2026/9/10 22:48:21

OmniRoute 国际化(i18n)工程指南:30+ 语言的 UI 与文档翻译、增量管线与自动化 QA

OmniRoute 国际化(i18n)工程指南:30 语言的 UI 与文档翻译、增量管线与自动化 QA 【免费下载链接】OmniRoute Never stop coding. Free MIT AI gateway: one endpoint, 352 providers (150 free), 1200 models Kimi, Claude, GPT, Gemini, GL…

阅读更多 →
useProjection 完全指南:用 VueUse 实现响应式数值域映射 2026/9/10 22:48:21

useProjection 完全指南:用 VueUse 实现响应式数值域映射

useProjection 完全指南:用 VueUse 实现响应式数值域映射 【免费下载链接】airi 💖🧸 Self hosted, you-owned Grok Companion, a container of souls of waifu, cyber livings to bring them into our worlds, wishing to achieve Neuro-sam…

阅读更多 →
35kV变电站设计要点与能效优化实践 2026/9/10 22:45:21

35kV变电站设计要点与能效优化实践

1. 项目背景与核心需求35kV变电站作为制造业企业的电力枢纽,其设计质量直接关系到生产线的稳定性和运营成本。在参与某大型汽车零部件制造企业的变电站设计时,我们遇到了几个典型挑战:厂区负荷密度高达25MW/km、精密冲压设备对电压波动敏感度…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞