legrisch / statamic-enhanced-graphql

Statamic CMS 的 GraphQL 扩展,提供针对集合、条目和全局集的替代 GraphQL 查询。

安装: 61

依赖: 0

建议者: 0

安全: 0

星星: 2

关注者: 2

分支: 1

开放问题: 1

类型:statamic-addon

v2.0.0 2023-07-04 10:05 UTC

This package is auto-updated.

Last update: 2024-09-04 12:35:16 UTC


README

Statamic CMS 的 GraphQL 扩展,提供针对集合、条目和全局集的替代 GraphQL 查询。

⚠️ 这是一个原型,虽然我认为它相对稳定,但并未经过彻底测试。使用时请自行承担风险。

功能

此插件为 Statamic Pro 提供了额外的 GraphQL 查询。

  • 将每个集合、全局集和分类转换为单独的 GraphQL 查询。
  • 将单个条目转换为 GraphQL 查询。
  • GraphQL 接口
  • 支持分页、过滤和排序。

原因

我仅使用 Statamic 的 Headless 模式,并利用其 GraphQL API。为了端到端类型安全,我使用 TypeScript 编写前端。默认情况下,Statamic 的默认 GraphQL 实现提供了一个查询来查询所有类型的条目,使用 GraphQL 接口,这意味着您需要实现很多类型守卫来在前端使用 GraphQL 类型,这增加了样板代码、查询属性并容易出错。

此插件旨在为每个集合和全局集提供单独的查询,以将类型守卫的数量保持在最低。

在名为 'pages' 的集合中查询具有 'home' 约束的条目内容,使用 Statamic 的默认 GraphQL 实现如下所示

query QueryHome {
  entry(collection: "pages", slug: "home") {
    __typename
    ... on Entry_Pages_Pages {
      content
    }
  }
}

注意额外的 __typename 以在 TypeScript 中实现类型守卫

const entryIsPage = (entry: EntryInterface): entry is Entry_Pages_Pages => {
  return entry.__typename === 'Entry_Pages_Pages'
}

此插件提供的查询使类型守卫变得过时,并使查询更加简洁

query QueryHome {
  pagesEntry(slug: "home") {
    content
  }
}

此外,您还可以将单个条目转换为 GraphQL 查询

query QueryHome {
  home {
    content
  }
}

如何安装

composer require legrisch/statamic-enhanced-graphql

使用方法

此插件将设置部分添加到 Statamic 控制面板中。

  • 将集合添加到转换查询。请确保集合仅使用一个蓝图。
  • 将全局集添加到转换查询。
  • 将分类添加到转换查询。
  • 将单个条目查询添加到转换查询。

待办事项

  • 条目查询中的筛选
  • 具有多个蓝图的集合中的条目查询