如何让 Drupal 8 视图与 GraphQL / Gatsby.js 一起使用

Posted

技术标签:

【中文标题】如何让 Drupal 8 视图与 GraphQL / Gatsby.js 一起使用【英文标题】:How to get Drupal 8 Views working with GraphQL / Gatsby.js 【发布时间】:2020-02-06 20:19:06 【问题描述】:

我正在努力寻找答案,因为我不确定这是 Drupal、GraphQl 还是 Gatsby 问题。

我正在构建一个以 Gatsby.js 和 Drupal-8 作为数据源的投资组合站点(通过 gatsby-source-drupal)。

GraphQl 对节点、分类法、用户的查询,例如工作没有问题。 但我无法在我的 API 端点访问我创建的视图。

我创建了一个带有路径的工作视图页面。 我还将数据公开为一个块。 尝试将 REST-Export 作为序列化 JSON,但我无法使用 JSON:API 和 JSON-Views-Module。

我希望通过我的 /jsonapi/endpoint 的视图访问数据,但我的视图没有显示。

我无法理解这一点。我错过了什么?甚至可能吗?谢谢!

【问题讨论】:

我相信 JSON:API 只公开实体(例如,节点、分类和用户)。您可以查询实体集合并在前端构建一个(排序的)视图。要通过 JSON 端点公开 Drupal 视图的结果,您需要 RESTful Web 服务和序列化模块(两者都在核心中),然后您将配置视图,以便它在您指定的任何路径上提供 REST 导出。 感谢您的回答。我也相信只有实体被暴露。我希望有一种方法可以将视图数据“插入”到我的 JSON:API 端点中,但这似乎是不可能的。接下来我将尝试从我的 Gatsby 项目中访问两个不同的端点(来自 JSON:API 和我的 Views REST 导出)。我也可以再试一次'entityqueue'-module (drupal.org/project/entityqueue)。谢谢 不客气。如果您能够在 Drupal 端成功地将视图导出为 JSON,那么问题可能在于您的前端设置。我还没有使用过 Gatsby 的 Drupal 源插件,但是如果您在问题中包含更多细节,这可能有助于引起比我更了解这方面事情的人的注意。干杯和好运- 嘿@othermachines,感谢您澄清这一点!我现在通过“entityqueue”模块得到了我需要的东西(客户订购的实体列表)。这不是一个优雅的解决方案,但它确实有效。但令我感到沮丧的是,Drupal 最强大的功能之一无法在无头设置中如此轻松地使用。如果我早些时候遇到过这个问题,那么使用 Drupal 作为后端将是一个大问题。但我会进一步调查,如果我找到另一个解决方案,我会将其添加为对此问题的编辑。感谢您的宝贵时间! 【参考方案1】:

TL;DR;你不能(来自 Drupal 的 JSON:API docsUnlike the REST module that comes with Drupal Core, JSON:API does not export Views results

如何获得过滤结果

gatsby-source-drupal 仅从 JSON:API 端点获取(默认为 /jsonapi)。

我认为您可以使用gatsby-source-drupal 提供的filters 选项来模拟Views 所做的事情。

Drupal 的 JSON:API Extras 模块还允许您设置一些默认过滤器。

Drupal documentation 关于过滤器

示例: ?filter[field_name]=value&filter[field_other]=value

最好的!

【讨论】:

【参考方案2】:

使用 JSON:API 模块,您确实无法获得视图,但还有 GraphQl module 和 GraphQl views module 可以使视图可用于创建自定义 graphql 模式。祝你好运

【讨论】:

以上是关于如何让 Drupal 8 视图与 GraphQL / Gatsby.js 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

Drupal 8 - 如何在视图中显示当前登录用户未创建的所有内容

如何让drupal视图显示基于节点的动态内容

如何使用 graphql 获得 drupal 节点的特定翻译

如何在 Drupal 8/9 中根据节点引用配置视图块?

Drupal:如何在视图中列出与配置文件节点相关的所有节点? (不是核心配置文件)。

视图中的drupal图像全屏显示,如何使图像变小?