Sanity io показать записи блога по авторам

Я изучаю Sanity io CMS и GROQ. Я создал простой блог, используя одну предопределенную схему блога Sanity. Мне удалось показать сообщения, одно сообщение и страницу автора, с указанием имени, изображения и биографии.

Я хотел бы показать список сообщений в блоге, принадлежащих автору, на его странице. В схеме постов есть ссылка на автора:

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

Я попытался добавить ссылку на массив в postв схеме Author, но в результате в CMS мне нужно вручную добавлять сообщения автору. Хотя я хотел бы запросить автора и вернуть сообщения, принадлежащие автору, поскольку в схеме сообщений есть ссылка на него, но я не могу найти, как это сделать. Возможно, это скорее запрос GROQ, чем проблема схемы, или и то, и другое?

3 ответа

Решение

Я нашел ответ, просмотрев документацию Sanity на странице Query Cheat Sheet . Это была не проблема схемы, а проблема запроса 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);

Затем я могу просто сопоставить «посты», используя «слаг», чтобы создать URL-адрес отдельного поста.

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

Если у вас есть массивauthorsнаpostследующий синтаксис извлечет все сообщения для текущего автора:

      `*[_type == "author"]{
      name,
      bio,
      "authorImage": image.asset->url,
      "posts": *[_type == "post" && author._ref in authors[]->author._id ]{
        title,
        "slug": slug.current,
      }
  }`

если вы хотите связаться с автором по его сообщениям, вы можете сделать это:

      *[_type == "post"]{
  _id,
  title,
  author->{ // here to reach author name and image you should type ->
  name,
  image
},
description,
mainImage,
slug
}
Другие вопросы по тегам