1

我正在使用 Kirby CMS 并将其用作无头 CMS。我正在使用 Blocks 字段来处理丰富的内容。在 API 中,此字段作为对象数组返回:

[
    {
        "content": {
            "level": "h2",
            "text": "test"
        },
        "id": "02d4a71b-cd02-4382-a78c-84ff1e68324b",
        "isHidden": false,
        "type": "heading"
    }
]

我认为这很棒。但就我而言,这很烦人,因为我应该自己完成所有渲染。

有没有办法或选项告诉 Kirby 将此字段呈现为 HTML 内容?

我知道有一种$blocks->toHtml()方法,但我使用的是独立的 React 前端,所以我不能在我的 JSX 中使用它。

4

1 回答 1

0

您不必直接使用 Kirby API 来从您的 Kirby 站点获取内容。Kirby 有几种不同的方式来响应 ajax 请求——响应可以是任何格式,例如 JSON、HTML 片段或其他任何格式。这里有一些最常用的方法来实现你想要的。

自定义路线

你可以定义一个自定义路由,就像一个“自定义 api 点”,你的 React 接口可以向它发送请求,并根据需要以 HTML 片段的形式响应阻止列表。您可以在如下 URL 中设置您的路线:

https://example.com/block-api

然后,在您的路线中,您可以使用toHTML()方法、asnippet()或任何其他方法将块转换为 HTML,然后您可以在响应中将其作为字符串发送回

在您的路线定义中,您还可以使用允许您(可选)按 ID 请求单个块的模式。您的自定义路由 URL 看起来像这样 - 最后一段是块 ID:

https://example.com/blocks-api/02d4a71b-cd02-4382-a78c-84ff1e68324b

自定义内容表示

当您尝试通过其正常 URL 访问 Kirby 站点中的页面时,Kirby 会将页面的内容放入您页面的模板中,并将其作为 HTML 文档返回。这是“默认”行为。但是,您可以覆盖它。

您可以为您的页面定义自定义内容表示,它告诉 Kirby 您希望以“不同格式”接收页面内容 - 例如 JSON、XML 或您希望的任何内容。这种“不同的格式”甚至可以只是一个 HTML 片段。您需要做的就是为它定义一个新模板。

在您的情况下,您可以创建一个内容表示,告诉 Kirby 仅返回您的块的完全格式化的 HTML 片段 - 通过创建一个名为“mypage.blocks.php”之类的模板,其中只有块的 HTML . 因此,如果要正常访问该页面,我们将转到 URL...:

https://example.com/mypage

...要获取该页面的“块”自定义内容表示,您现在可以转到:

https://example.com/mypage.blocks

您的自定义内容表示也可以有自己的控制器。如果您想让 Kirby 只向您发送一个块的 HTML 代码,而不是页面上的所有块,这将非常有用。您可以在 URL 中使用查询参数来告诉控制器您希望 HTML 用于哪个块。然后,控制器将检查查询参数的 URL,如果参数存在,它只返回所需的块。这将使您的 React 应用程序能够通过向以下 URL 发送请求来获取页面上单个块的 HTML 代码:

https://example.com/mypage.blocks?id=02d4a71b-cd02-4382-a78c-84ff1e68324b
于 2021-11-12T07:15:13.393 回答