Sanity io 显示作者的博文

问题描述

我正在学习 Sanity io CMS 和 GROQ。我使用 Sanity 预定义的博客架构构建了一个简单的博客。我已经设法显示帖子、单个帖子和作者页面,显示姓名、图片和个人简介。

我想要做的是在他的页面显示属于作者的博客文章列表。在帖子模式中有对作者的引用:

{
  name: 'author',title: 'Author',type: 'reference',to: {type: 'author'},},

我尝试在作者架构中添加post 的数组引用,但结果是在 CMS 中我需要手动向作者添加帖子。虽然,我想查询作者并返回属于作者的帖子,因为在帖子架构中有对它的引用,但找不到如何做。与其说是架构问题,不如说是 GROQ 查询,还是两者兼而有之?

解决方法

自己通过查看 Query Cheat Sheet 页面中的 Sanity 文档找到了答案。这不是方案问题,而是 GROQ 查询问题。在作者页面中,在显示作者简介等的查询中,我添加了另一部分,我在其中查询该作者的帖子:

// GROQ Query
sanityClient
  .fetch(
    `*[_type == "author"]{
      name,bio,"authorImage": image.asset->url,"posts": *[_type == "post" && author._ref in *[_type=="author" && name == name ]._id ]{
        title,"slug": slug.current,}
  }`
  )
  .then((data) => setAuthor(data[0]))
  .catch(console.error);

然后我可以简单地通过“帖子”进行映射,使用“slug”来构建单个帖子的 URL。

{author.posts &&
  author.posts.map((p) => {
    return (
      <li>
        <a href={`/post/${p.slug}`}>{p.title}</a>
      </li>
    );                  
   })
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...