首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Conteful对Gatsby中的内容进行标记排序

用Conteful对Gatsby中的内容进行标记排序
EN

Stack Overflow用户
提问于 2022-01-17 16:31:02
回答 1查看 285关注 0票数 0

在内容上,我创造了一个内容,很少有媒体图片。这些图片有两个不同的标签boxonattaqueGenetique。我想通过使用我为每个媒体添加的标签来对幻灯片进行排序,但是我找不到这样的方法。在Gatsby网站上有一个例子,但并不是很清楚,我的尝试失败了。

来自盖茨比的例子

代码语言:javascript
复制
query FilterByTagsQuery {
  allContentfulNumber(
    sort: { fields: contentful_id }
    filter: {
      metadata: {
        tags: { elemMatch: { contentful_id: { eq: "numberInteger" } } }
      }
    }
  ) {
    nodes {
      title
      integer
    }
  }
}

我想我必须把代码转到allContentfulNumber变成allContentfulDiaporama的地方

代码语言:javascript
复制
metadata: {
        tags: { elemMatch: { contentful_id: { eq: "numberInteger" } } }
      }

成为

代码语言:javascript
复制
metadata: {
        tags: { elemMatch: { contentful_id: { eq: "boxon" } } }
      }

但是,当我试图编译控制台时,返回56:5 error Field "metadata" is not defined by type "ContentfulDiaporamaFilterInput" graphql/template-strings

我不知道当媒体在内容中导入元数据时在哪里捕获元数据.但我对graphqlContentful非常熟悉。如果有一个解决办法,那就是可以让我的一天快乐!

EN

回答 1

Stack Overflow用户

发布于 2022-01-17 16:53:15

在盖茨比的例子中,metadata是一个在他们的数据结构中有效的GraphQL节点,如果你的节点没有使用它,它就会破坏代码,因为它不是一个有效的自定义类型。

除了使用无效字段(metadata)之外,查询中的问题还在于使用elemMatch筛选器,将contentful_id(数字)与boxon (字符串)进行比较,因此在您的场景中它将永远无法工作(因为它在Gatsbys中工作,因为它是相同的类型)。在您的示例中,您可能希望使用in (用于数组)或eq (用于单个值)。在:https://www.gatsbyjs.com/docs/graphql-reference/#filter上检查可用的列表

就我理解您的问题而言,您似乎希望将diaporama数据拆分到两个不同的节点中,即包含boxon的节点和包含attaqueGenetique的节点。如果是这样,则需要通过别名创建不同的节点:

代码语言:javascript
复制
query FilterByTagsQuery {
  boxon: allContentfulDiaporama(
    sort: { fields: contentful_id }
    filter: {
        metadata: { tags: { in: ["boxon"]  } }
      }
  ) {
    nodes {
      #your data/fields here
    }
  }
  attaqueGenetique: allContentfulDiaporama(
    sort: { fields: contentful_id }
    filter: {
        metadata: { tags: { in: ["attaqueGenetique"]  } }
      }
  ) {
    nodes {
      #your data/fields here
    }
  }
}

在GraphiQL操场上测试查询,在localhost:8000/___graphql上可用,在那里添加或删除过滤器并查看可用节点将更加直观。

上面的片段将根据别名的标记生成两个不同的数据结构。使用以下内容:boxon: allContentfulDiaporama,您将在boxon中对allContentfulDiaporama的结果进行混叠,因此在您的页面中,您将能够分别直接访问props.data.boxonprops.data.attaqueGenetique

请记住,sort筛选方法只适用于日期或数字值,对于字符串,它将按字母顺序对它们进行排序。因此,我假设您的数据有一个contentful_id (我不确定它如何帮助按contentful_id排序)。

根据这个拉请求enableTags功能是在尖端版本(5天前)中修正的,所以试着升级你的插件依赖性。

根据这个GitHub螺纹,它似乎是固定的

代码语言:javascript
复制
gatsby-source-contentful@7.5.0-next.0

或者在下一个版本中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70744571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档