繁体   English   中英

Keystone 6 中的内容版本控制

[英]Content versioning in Keystone 6

在之前的 Keystone 4 项目中,我能够使用内容版本控制。 也就是说,如果我要更新内容实体(例如 BlogPost),我将有可能在博文的前一版本和当前版本之间切换。

我在 Keystone 6 的文档中看不到这方面的任何选项,而且我也发现很难在网上找到关于这个主题的任何资源。 有人对此有任何见解吗? 如果不可能开箱即用 - 您对如何手动完成它有什么建议吗?

提前致谢

内容版本控制是 Keystone 团队在内部讨论过很多的东西,但这是一个相当复杂的领域。 有很多不同的方法来解决这个问题,即使是在单个项目中进行版本控制时也是如此。 如果您将关系引入其中并跨多个项目进行版本控制,问题空间会迅速扩大。

如果确实构建了第一方解决方案,它可能会构建在 Keystone“之上”——类似于@keystone-6/auth package——即,一个单独的、可配置的 package,它使用记录的 Keystone API 来添加功能。 无论如何,就目前而言,版本控制和发布工作流程是您需要自己设计和构建的。

我的建议是首先明确您需要版本化的内容和不需要的版本。 需要考虑的事项:

  • 您需要对整个项目进行版本控制还是只需要对几个字段进行版本控制?
  • 您是否需要更改历史记录,或者拥有一个“已发布”版本和一个可选的可编辑“草稿”版本就足够了吗?
  • 您需要“还原”更改,还是“仅更新”model 就足够了?
  • 你关心相关项目吗? (例如,假设您的博客帖子与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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM