taicait/ss-gatsby-fixed

SilverStripe Gatsby 固定版

安装: 21

依赖: 0

建议: 0

安全: 0

星标: 0

关注者: 1

分支: 0

开放问题: 0

类型:silverstripe-vendormodule

1.0 2021-01-15 06:20 UTC

This package is not auto-updated.

Last update: 2024-09-21 21:57:18 UTC


README

此模块提供了一个定制的 GraphQL API,用于为 Gatsby 静态构建提供数据。这使得您的 SilverStripe CMS 安装可以成为 Gatsby 静态站点的无头数据提供者。

安装

$ composer require silverstripe/silverstripe-gatsby

要求

您的 Gatsby 项目必须已安装 gatsby-source-silverstripe 插件。

$ npm install --save gatsby-source-silverstripe

还推荐您安装 silverstripe-gatsby-helpers 库。

$ npm install --save silverstripe-gatsby-helpers

如何使用 API

该 API 有自己的端点,与 SilverStripe 管理端 GraphQL 服务器或前端上可能使用的任何 GraphQL 都分开。

http://mysite.com/__gatsby/graphql

查询数据

查询本身有点尴尬,但总的来说,唯一访问此 API 的客户端应该是 Gatsby 本身,因此它没有巨大的义务要成为开发友好型。

query Sync($Limit:Int!, $Token:String, $Since:String) {
  sync {
    results(limit: $Limit, offsetToken: $Token, since: $Since) {
      offsetToken # Use this on subsequent requests to chunk results
      nodes {
        id
        parentUUID
        uuid
        created
        lastEdited
        className
        ancestry
        contentFields # All custom fields are flattened into a JSON string
        link # DataObjects are encouraged to provide Link() methods if they appear as pages
        relations {
          type # HAS_ONE, HAS_MANY, etc
          name
          ownerType
          records {
            className
            id
            uuid
          }
        }
      }
    }
  }
}`

参数

  • limit: 限制每个查询返回的记录数。在大型网站上,这至关重要。默认值:1000
  • offsetToken: 如果您的上一个请求提供了 offsetToken,请在此处传递它,以便从上一个结果集留下的地方继续。
  • since: 对 Gatsby 的增量/预览构建至关重要。提供一个时间戳作为参考,以获取自那时以来已更改的记录。

控制公开的数据对象

显然,您不希望公开应用程序中的每个数据对象。如 LoginAttemptChangeSet 等内部对象对于 Gatsby 构建(其中内容是重点)几乎没有任何用处。

您可以使用通配符来白名单和黑名单类。

SilverStripe\Gatsby\GraphQL\Types\SyncResultTypeCreator:
  included_dataobjects:
    myapp: 'MyCompany\MyApp\*'
  excluded_dataobjects:
    security: 'SilverStripe\Security\*'
    versioned: 'SilverStripe\Versioned\*'
    shortcodes: 'SilverStripe\Assets\Shortcodes\*'
    siteTreeLink: 'SilverStripe\CMS\Model\SiteTreeLink'

如果同时提供了白名单和黑名单,则黑名单具有最终决定权。

如果没有提供白名单,则默认情况下所有数据对象都在查询中,直到被黑名单。

如果没有提供白名单和黑名单,请不要这样做。

单体类型

由于 SilverStripe 中复杂的继承模式,使用联合和接口创建正确类型的 API 需要大量工作,并且可能最终会降低开发人员的体验。目前,所有类型都是 DataObject,Gatsby 源插件能够通过为每个未序列化字段在类特定子字段中进行命名空间来伪类型化 customFields 块。

query {
	allDataObjects {
		# core fields here
		id
		link
		lastEdited
		SilverStripeSiteTree {
			# fields specific to this class are grouped appropriately
			title
			menuTitle
			content
		}
		SilverStripeBlog {
			featuredImage {
				link
			}
			Children {
				link
				# relationships still have to nest their fields
				SilverStripeBlogPost {
					categories {
						title
					}
				}
			}
		}
	}
}

基于令牌的认证(用于草稿内容)

即将推出。