Node.js (Gatsby+;Contentful)以编程方式创建类别页面?
我想知道当使用Contentful作为CMS时,如何使用Gatsby.JS以编程方式设置类别页面 我知道,在MDX中,您可以简单地将gatsby-node.js配置为如下内容,以编程方式创建类别页面:Node.js (Gatsby+;Contentful)以编程方式创建类别页面?,node.js,reactjs,gatsby,contentful,Node.js,Reactjs,Gatsby,Contentful,我想知道当使用Contentful作为CMS时,如何使用Gatsby.JS以编程方式设置类别页面 我知道,在MDX中,您可以简单地将gatsby-node.js配置为如下内容,以编程方式创建类别页面: result.data.allMDX.categories.distinct.forEach((category) => { createPage({ path: `/${category}`, component: path.resolve(`src/templates/cat
result.data.allMDX.categories.distinct.forEach((category) => {
createPage({
path: `/${category}`,
component: path.resolve(`src/templates/category-template.js`),
context: {
category,
},
})
如何使用Contentful实现同样的效果?我在网上找不到任何好的资源。没有人在谈论如何使用Gatsby+Contentful以编程方式设置类别页面
下面是我当前的gatsby-node.js文件:
const path = require('path')
exports.createPages = async ({ graphql, actions }) => {
const { createPage } = actions
const result = await graphql(`
query GetStrains {
strains: allContentfulStrains(filter: {node_locale: {eq: "en-US"}}) {
nodes {
slug
}
}
categories: allContentfulStrains {
distinct(field: category)
}
}
`)
result.data.strains.nodes.forEach(strain => {
createPage({
path: `/strains/${strain.slug}`,
component: path.resolve(`src/templates/strain-template.js`),
context: {
slug: strain.slug
},
})
})
result.data.allContentfulStrains.categories.distinct.forEach((category) => {
createPage({
path: `/${category}`,
component: path.resolve(`src/templates/category-template-strains.js`),
context: {
category,
},
})
})
正如你在上面看到的,我试着用与MDX相同的方式添加类别,但它不起作用(OFC)
我将非常感谢您的反馈 由于Contentful和Gatsby都没有“类别”的概念,而且在你的应用程序中也没有任何可能代表类别的页面惯例,因此很难想象会有这方面的现有技术 如果您试图基于另一个节点的
类别
字段创建页面(例如contentfulStrain
),则需要查询这些节点并根据需要进行整理/重复数据消除,然后再调用createPage
为每个唯一的类别
。大概是这样的:
const{
数据:{
应变:{节点:应变},
},
}=等待图形ql(`
{
应变:AllContentful应变(筛选器:{node_locale:{eq:“en-US”}){
节点{
鼻涕虫
类别
}
}
}
`)
紧张
//从应变转换为类别
.减少((类别、应变)=>{
类别.添加(应变.类别)
退货类别
},新集合())
//为每个类别创建一个页面
.forEach((类别)=>{
创建页面({
//TODO:使用slugify函数创建url友好的slug
//在将“category”用作路径之前。
路径:`/${category}`,
组件:path.resolve(`src/templates/category template.js`),
背景:{
类别
},
})
})
然后在src/templates/category-template-strains.js
中,您将有一个查询,该查询将过滤category
字段上的allContentfulStrains
,并检索构建分类页面所需的任何其他数据