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
}