我正在玩Kirby CMS,并将其用作无头CMS。我正在使用块字段来处理丰富的内容。在API中,此字段作为对象数组返回:
[
{
"content": {
"level": "h2",
"text": "test"
},
"id": "02d4a71b-cd02-4382-a78c-84ff1e68324b",
"isHidden": false,
"type": "heading"
}
]
我认为这太棒了。但就我而言,这很烦人,因为我应该自己完成所有的渲染。
有没有一种方法或选项可以告诉Kirby将该字段呈现为HTML内容?
我知道有一个$blocks->toHtml()
方法,但我使用的是独立的React前端,所以我不能在我的JSX中使用它
您不必直接使用Kirby API从您的Kirby站点获取内容。Kirby有几种不同的方式来响应ajax请求,并且该响应可以是任何格式,例如JSON、HTML片段或任何其他格式。这里有几个最常用的方法来实现你想要的。
自定义路线
您可以定义一个自定义路由,它就像一个"自定义api点",React接口可以向其发送请求,并根据需要将阻止列表作为HTML片段进行响应。你可以在一个URL上设置你的路线,比如:
https://example.com/block-api
在路由中,您可以使用toHTML()
方法、snippet()
方法或任何其他方法将块转换为HTML,然后将其作为字符串发送回响应中。
在您的路由定义中,您还可以使用一种模式,允许您(可选(通过ID请求单个块。您的自定义路由URL看起来像这样-其中最后一段是块ID:
https://example.com/blocks-api/02d4a71b-cd02-4382-a78c-84ff1e68324b
自定义内容表达
当你试图通过Kirby网站的正常URL访问某个页面时,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