Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js (Gatsby+;Contentful)以编程方式创建类别页面?_Node.js_Reactjs_Gatsby_Contentful - Fatal编程技术网

Node.js (Gatsby+;Contentful)以编程方式创建类别页面?

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

我想知道当使用Contentful作为CMS时,如何使用Gatsby.JS以编程方式设置类别页面

我知道,在MDX中,您可以简单地将gatsby-node.js配置为如下内容,以编程方式创建类别页面:

  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
,并检索构建分类页面所需的任何其他数据