我正在玩柯比CMS,并使用它作为一个无头CMS。我使用块字段来处理丰富的内容。在API中,此字段作为对象数组返回:
[
{
"content": {
"level": "h2",
"text": "test"
},
"id": "02d4a71b-cd02-4382-a78c-84ff1e68324b",
"isHidden": false,
"type": "heading"
}
]我觉得这很好。但在我的情况下,这是烦人的,因为我应该自己做所有的渲染。
是否有一种方法或选项可以告诉Kirby将该字段呈现为HTML内容?
我知道有一个$blocks->toHtml()方法,但是我使用的是一个独立的React前端,所以我不能在我的JSX中使用这个方法。
发布于 2021-11-12 07:15:13
您不必直接使用Kirby API来从Kirby站点获取内容。Kirby有几种不同的方法来响应ajax请求--而且响应可以是任何格式的,比如JSON、HTML片段或其他任何东西。以下是几种最常用的实现你想要的东西的方法。
自订路线
您可以定义一个自订路线,它类似于一个“自定义api点”,您的React接口可以向它发送请求,并根据需要以块列表的形式进行响应。您可以在URL上设置路由,如下所示:
https://example.com/block-api在您的路由中,您可以使用toHTML()方法、snippet()或任何其他方法将这些块转换为HTML,然后在响应中使用像字符串一样发回。
在您的路由定义中,还可以使用允许您(可选地)按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...to获取该页面的“块”自定义内容表示形式,现在转到:
https://example.com/mypage.blocks您的自定义内容表示也可以有它自己的控制器。如果您想让Kirby只发送一个块的HTML代码,而不是页面上的所有块,这是非常有用的。您可以在URL中使用一个查询参数来告诉控制器您想要HTML的哪个块。然后,控制器将检查查询参数的URL,如果参数在那里,则只返回所需的块。这将使您的React应用程序能够获得页面上仅一个块的HTML代码,方法是向URL发送如下请求:
https://example.com/mypage.blocks?id=02d4a71b-cd02-4382-a78c-84ff1e68324bhttps://stackoverflow.com/questions/68205888
复制相似问题