[英]Content versioning in Keystone 6
在之前的 Keystone 4 项目中,我能够使用内容版本控制。 也就是说,如果我要更新内容实体(例如 BlogPost),我将有可能在博文的前一版本和当前版本之间切换。
我在 Keystone 6 的文档中看不到这方面的任何选项,而且我也发现很难在网上找到关于这个主题的任何资源。 有人对此有任何见解吗? 如果不可能开箱即用 - 您对如何手动完成它有什么建议吗?
提前致谢
内容版本控制是 Keystone 团队在内部讨论过很多的东西,但这是一个相当复杂的领域。 有很多不同的方法来解决这个问题,即使是在单个项目中进行版本控制时也是如此。 如果您将关系引入其中并跨多个项目进行版本控制,问题空间会迅速扩大。
如果确实构建了第一方解决方案,它可能会构建在 Keystone“之上”——类似于@keystone-6/auth
package——即,一个单独的、可配置的 package,它使用记录的 Keystone API 来添加功能。 无论如何,就目前而言,版本控制和发布工作流程是您需要自己设计和构建的。
我的建议是首先明确您需要版本化的内容和不需要的版本。 需要考虑的事项:
Tags
列表相关,编辑标签是否构成帖子的新“版本”,或者是版本化部分的“外部”?)spring 记住的一些基本方法:
对于诸如博客文章之类的相对简单的内容,您也许能够在字段级别的项目中实施草稿/发布工作流。 是这样的:
Post: list({
fields: {
slug: text({ validation: { isRequired: true }, isIndexed: 'unique' }),
publishedTitle: text({ validation: { isRequired: true } }),
publishedBody: document({ /* ... */ }),
draftTitle: text({ validation: { isRequired: true } }),
draftBody: document({ /* ... */ }),
},
// access, hooks, etc.
}),
您的前端仅显示已published...
字段,但您将后端限制为仅允许编辑draft...
字段(您甚至可以从管理 UI 隐藏已发布的字段)。 可以添加挂钩或自定义突变以通过在字段之间复制来“促进”草稿内容发布。 通过正确的访问控制,您甚至可以设置前端以使用神奇的 URL 参数或其他东西预览草稿内容。
它非常基本,但易于设置和使用。
一个更强大的替代方案是用单独的项目表示版本,并使用一个字段来跟踪哪个版本是当前发布的内容:
Post: list({
fields: {
slug: text({ validation: { isRequired: true }, isIndexed: true }),
title: text({ validation: { isRequired: true } }),
body: document({ /* ... */ }),
isPublished: checkbox(),
},
// access, hooks, etc.
}),
在这种情况下, slug
字段在列表中不是唯一的——每个帖子可以有多个项目,代表即将到来的草稿或历史版本。 发布帖子的一个版本时(通过将isPublished
设置为 true),挂钩确保具有相同 slug 的任何项目都将isPublished
标志设置为 false。 前端简单地通过isPublished
过滤以获取当前版本(如果需要,通过访问控制强制执行)。 这使您既可以发布更新又可以回滚到任何以前的版本。 它还在某种程度上解决了关系——例如。 如果您有一个相关的Tags
列表,与Posts
多对多链接,则对帖子标签的更新与内容一起进行版本控制。
为了使工作流程顺畅,拥有一个复制现有帖子的自定义突变可能会很有用,这样您就可以轻松地对现有内容进行更改。 也许还有一个自定义的管理 UI 页面,以帮助可视化帖子历史记录和管理恢复操作等。
这些只是两个例子,但还有许多其他方法可以解决这个问题。 只要清楚你的要求,然后做最简单的事情::)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.