在内容上,我创造了一个内容,很少有媒体图片。这些图片有两个不同的标签boxon和attaqueGenetique。我想通过使用我为每个媒体添加的标签来对幻灯片进行排序,但是我找不到这样的方法。在Gatsby网站上有一个例子,但并不是很清楚,我的尝试失败了。
来自盖茨比的例子
query FilterByTagsQuery {
allContentfulNumber(
sort: { fields: contentful_id }
filter: {
metadata: {
tags: { elemMatch: { contentful_id: { eq: "numberInteger" } } }
}
}
) {
nodes {
title
integer
}
}
}我想我必须把代码转到allContentfulNumber变成allContentfulDiaporama的地方
metadata: {
tags: { elemMatch: { contentful_id: { eq: "numberInteger" } } }
}成为
metadata: {
tags: { elemMatch: { contentful_id: { eq: "boxon" } } }
}但是,当我试图编译控制台时,返回56:5 error Field "metadata" is not defined by type "ContentfulDiaporamaFilterInput" graphql/template-strings
我不知道当媒体在内容中导入元数据时在哪里捕获元数据.但我对graphql和Contentful非常熟悉。如果有一个解决办法,那就是可以让我的一天快乐!
发布于 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的节点。如果是这样,则需要通过别名创建不同的节点:
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.boxon和props.data.attaqueGenetique。
请记住,sort筛选方法只适用于日期或数字值,对于字符串,它将按字母顺序对它们进行排序。因此,我假设您的数据有一个contentful_id (我不确定它如何帮助按contentful_id排序)。
根据这个拉请求,enableTags功能是在尖端版本(5天前)中修正的,所以试着升级你的插件依赖性。
根据这个GitHub螺纹,它似乎是固定的
gatsby-source-contentful@7.5.0-next.0或者在下一个版本中。
https://stackoverflow.com/questions/70744571
复制相似问题