getResourceFromContext

从 getStaticProps 或 getServerSideProps 上下文中获取资源。


const resource = await drupal.getResourceFromContext<T = JsonApiResource>(
input,
context,
options?: {
params,
withAuth,
deserialize,
locale,
defaultLocale,
pathPrefix,
isVersionable,
}
): Promise<T>
  • 输入: 字符串 | DrupalTranslatedPath
    • 必需
    • 资源类型 node--article 或来自 translatePathFromContext 的翻译后的路径。
  • 上下文: GetStaticPropsContext | GetServerSidePropsContext
    • 必需
    • 来自 getStaticPropsgetServerSideProps 的上下文。
  • 选项
    • 可选
    • params: JsonApiParams: JSON:API 参数,例如 filterfieldsincludesort
    • withAuth: boolean | DrupalClientAuth:
      • 设置要使用的身份验证方法。请参阅 身份验证文档
      • 设置为 true 以使用在客户端配置的身份验证方法。
    • deserialize: boolean: 设置为 false 以返回原始 JSON:API 响应。
    • locale: string: 获取资源的语言环境。
    • defaultLocale: string: 站点的默认语言环境。
    • pathPrefix: string: 如果您是从子目录调用,则设置 pathPrefix。例如:对于 /articles/[...slug].tsx,使用 pathPrefix: "/articles"
    • isVersionable: boolean: 如果您正在获取资源的修订版,则设置为 true。对于节点实体类型,自动设置为 true

注意

  • 本地化资源将根据 localedefaultLocalecontext 中的值获取。

  • 如果您传入 DrupalTranslatedPath 作为输入,getResourceFromContext 将获取路径中的 typeid,并向 Drupal 发出 getResource 调用。

export async function getStaticProps(context) {
const path = await drupal.translatePathFromContext(context)
const node = await drupal.getResourceFromContext(path, context)
return {
props: {
node,
},
}
}
  • 如果您传入 string 输入,例如 node--articlegetResourceFromContext 将向 Drupal 发出子请求调用以翻译路径,然后获取资源。

    您将需要 子请求解耦路由 模块。

export async function getStaticProps(context) {
const node = await drupal.getResourceFromContext("node--article", context)
return {
props: {
node,
},
}
}

示例

  • 从上下文获取资源。

pages/[[...slug]].tsx

export async function getStaticProps(context) {
const node = await drupal.getResourceFromContext("node--page", context)
return {
props: {
node,
},
}
}
  • 在子目录中从上下文获取资源。

pages/articles/[[...slug]].tsx

export async function getStaticProps(context) {
const node = await drupal.getResourceFromContext("node--page", context, {
pathPrefix: "/articles",
})
return {
props: {
node,
},
}
}

TypeScript

  • 对于节点实体类型,使用 DrupalNode
import { DrupalNode } from "next-drupal"
const node = await drupal.getResourceFromContext<DrupalNode>(
"node--page",
context
)
  • 对于分类术语实体类型,使用 DrupalTaxonomyTerm
import { DrupalTaxonomyTerm } from "next-drupal"
const term = await drupal.getResourceFromContext<DrupalTaxonomyTerm>(
"taxonomy_term--tags",
context
)

有关更多内置类型,请参阅 TypeScript 文档