Sanity.io CMS – 编程模式类型

Sanity.io CMS – program a schema type

我已经创建了一个架构类型,如下所示,我想对其进行编程,以便对于每个博客 post 它递增:1 - 第一个 post,2 - 第二个 post,等等(那么这个数字将在多个页面上使用)。一件简单的事情,但我找不到任何关于如何做的信息。这有没有可能?任何 links/examples/references 将不胜感激。

// schemas/post.js
{
  name: 'index',
  title: 'Index',
  type: 'number',
},

谢谢

您不一定需要在架构中添加此计数。我在模式中看到的一些问题包括:

  1. 您删除了一篇文章 - 其他人的索引应该反映这一点吗?例如,如果删除第 10 篇文章 #11 是否应该变为 #10
  2. 一篇文章已创建但从未发布 - 即使其他较新的文章已经发布,它是否应该有一个保留索引?
  3. 如果不小心数字重合并且共享索引会怎样? Sanity 目前没有 unique 字段的功能,除了 _ids 本身,所以这可能是非常有问题的。

另一种方法是通过 GROQ 动态获取此值,(我认为)这种方法在未来更有弹性且更容易更改。

这是一个示例查询:

*[slug == $articleSlug]{
  ...,
  // Count every older article and add 1 - that's the current article's index
  "articleIndex": count(*[
    // From every published article (non-draft)
    _type == 'article' &&
    !(_id in path("drafts.**")) &&
    // Get only those older than the current one
    _createdAt > ^._createdAt
  ]) + 1
}

如果您发现查询变得复杂且难以管理,我建议将其部分抽象为变量,正如我在 GROQ guide on writing complex queries

中概述的那样

希望对您有所帮助