【问题标题】:Sanity.io CMS – program a schema typeSanity.io CMS – 编写模式类型
【发布时间】:2021-09-16 09:27:26
【问题描述】:

我已经创建了一个如下所示的模式类型,我想对其进行编程,以便对于每篇博客文章,它都会递增:1 - 第一篇文章,2 - 第二篇文章,依此类推(然后这个数字将用于多页)。一件简单的事情,但我找不到任何关于如何做到这一点的信息。这有没有可能?任何链接/示例/参考将不胜感激。

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

谢谢

【问题讨论】:

    标签: sanity


    【解决方案1】:

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

    1. 您删除了一篇文章 - 其他人的索引是否应该反映这一点?比如文章#11如果第10条被删除,是否应该变成#10?
    2. 一篇文章已创建但从未发布 - 即使其他较新的文章已经发布,它是否应该有保留索引?
    3. 如果数字意外重合并且共享索引会发生什么情况? Sanity 目前对 _ids 本身以外的字段没有 unique 功能,因此这可能会有很大问题。

    另一种方法是通过 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 中概述的那样@?

    希望对你有帮助?

    【讨论】:

    • 对不起,我没有早点回来,我请了几天假。感谢您的详尽解释,它完美无缺!还有一个问题,是否也可以按相反的顺序执行(最新帖子的索引为 1,下一个 – 2,依此类推)
    • 永远不要因为及时回答而感到压力 - 我们需要更冷静,我很高兴你请了几天假 :) 你当然可以!在上面的示例中,您所要做的就是更改文章日期之间的比较:_createdAt < ^._createdAt(而不是 >)。这将计算所有比当前文章新的文章,最新文章为 0,因此索引为 1 ?
    • 太棒了!非常感谢:)
    猜你喜欢
    • 1970-01-01
    • 2019-04-26
    • 2020-03-29
    • 2015-04-07
    • 2021-08-07
    • 2022-01-07
    • 2021-12-09
    • 1970-01-01
    • 2021-09-03
    相关资源
    最近更新 更多