В настоящее время я использую API маршрутов сбора для создания страниц для простого блога с данными, поступающими из Contentful.
Например, создание страницы для каждой категории сообщений блога:
-- src/pages/categories/{contentfulBlogPost.category}.js
export const query = graphql`
query categoriesQuery($category: String = "") {
allContentfulBlogPost(filter: { category: { eq: $category } }) {
edges {
node {
title
category
description {
description
}
...
}
}
}
}
...
[React component mapping all blogposts from each category in a list]
...
Это нормально работает.
Но теперь я хотел бы иметь несколько категорий для каждого сообщения в блоге, поэтому я переключился на Contentful references, many
content-type, который позволяет иметь несколько записей для поля:
Теперь результат моего запроса graphQL в поле category2
представляет собой массив разных категорий для каждого сообщения в блоге:
Запрос :
query categoriesQuery {
allContentfulBlogPost {
edges {
node {
category2 {
id
name
slug
}
}
}
}
}
Выход :
{
"data": {
"allContentfulBlogPost": {
"edges": [
{
"node": {
"category2": [
{
"id": "75b89e48-a8c9-54fd-9742-cdf70c416b0e",
"name": "Test",
"slug": "test"
},
{
"id": "568r9e48-t1i8-sx4t8-9742-cdf70c4ed789vtu",
"name": "Test2",
"slug": "test-2"
}
]
}
},
{
"node": {
"category2": [
{
"id": "75b89e48-a8c9-54fd-9742-cdf70c416b0e",
"name": "Test",
"slug": "test"
}
]
}
},
...
Теперь, когда категории находятся внутри массива, я не знаю, как:
- напишите переменную запроса для фильтрации названий категорий;
- используйте поле заголовка в качестве маршрута для динамического создания страницы.
Для авторов блогов я делал:
query authorsQuery($author__slug: String = "") {
allContentfulBlogPost(filter: { author: { slug: { eq: $author__slug } } }) {
edges {
node {
id
author {
slug
name
}
...
}
...
}
И создание страниц с src/pages/authors/{contentfulBlogPost.author__slug}.js
Думаю, мне придется вместо этого использовать API createPages.