legrisch / statamic-enhanced-graphql
Statamic CMS 的 GraphQL 扩展,提供针对集合、条目和全局集的替代 GraphQL 查询。
v2.0.0
2023-07-04 10:05 UTC
Requires
- php: ^8.1
- statamic/cms: ^4.0
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 控制面板中。
- 将集合添加到转换查询。请确保集合仅使用一个蓝图。
- 将全局集添加到转换查询。
- 将分类添加到转换查询。
- 将单个条目查询添加到转换查询。
待办事项
- 条目查询中的筛选
- 具有多个蓝图的集合中的条目查询