yanc3k / api-content-provider-bundle
用于Sulu CMS(开源且基于Symfony)的无头内容提供的组件包。
Requires
- php: >=5.6
- psr/log: ~1.0
- sulu/sulu: ~1.6.0
- symfony/dependency-injection: ~2.3|~3.0
- symfony/event-dispatcher: ~2.3|~3.0
- symfony/expression-language: ~2.3|~3.0
- symfony/http-kernel: ~2.3|~3.0
Requires (Dev)
- php: >=5.3
- phpunit/phpunit: ~5.4
- symfony/config: 2.3|~3.0
This package is not auto-updated.
Last update: 2024-09-24 17:52:50 UTC
README
该组件包的目的是使开源CMS Sulu能够作为无头后端。可以在Sulu管理区域创建内容页面。所有返回的内容数据都存储在简单的键值对中。键可以自由设置,内容创建方式与常规Sulu应用程序类似。
可用于ReactJs或Angular WebApps或React Native、原生、Expo JS或其他移动应用。
可用的Sulu内容类型
Sulu提供许多不同的内容类型。一个内容类型可能是一个简单的文本行输入、一个全文编辑器或用于图像和其他文件的媒体选择。由于它们在无头使用方式上可能差异很大,因此它们都需要以不同的方式处理。到目前为止,我已经实现了对我来说最重要的几个类型。
目前以下Sulu内容类型可用
文本行
显示一个简单的文本行,插入的内容将被保存为简单的字符串。(来自Sulu CMS文档)
文本编辑器
显示一个富文本编辑器,能够格式化文本。编辑器的输出将存储在字符串字段中的HTML中。(来自Sulu CMS文档)
媒体选择
显示一个列表,可以分配媒体部分的一些资产到页面。还允许定义一个位置,可以在模板中稍后处理。(来自Sulu CMS文档)
安装
使用composer安装组件包
composer require yanc3k/api-content-provider-bundle
在app/AdminKernel.php和app/WebsiteKernel.php文件中启用组件包:注意:这与vanilla Symfony应用程序略有不同。
$bundles = [
...
$bundles[] = new yanc3k\ApiContentProviderBundle\ApiContentProviderBundle();
...
];
使用方法
此组件包提供了一个简单的方法,使用Sulu CMS作为无头后端来创建页面内容。在Sulu中,您可以轻松地为CMS管理区域创建新的模板。这些模板是用XML编写的。ApiContentProviderBundle具有一个可以处理页面请求中从Sulu来的数据的控制器。
要使用它,您需要做两件事,下面将详细介绍。重要:这绝对不会干扰Sulu的其他功能。安装此组件包不会失去任何东西。
最简单的方法
ApiContentProviderBundle附带了一个Sulu XML模板,可以直接使用。您需要将其复制到您的app/Resources/templates/pages文件夹。您可以通过手动操作或在项目根目录中使用以下命令完成此操作:
cp vendor/yanc3k/api-content-provider-bundle/docs/Resources/api-content.xml app/Resources/templates/pages/
从现在起,您可以在Sulu CMS管理区域中的任何内容页面上选择API内容模板。
内容页面
您刚刚复制的XML模板定义的内容页面具有以下功能:
- 定义页面的标题,该标题将在JSON响应中的
title键下出现。 - 定义页面内容的URL,此值将包含在JSON响应中的
url键中。 - 定义用于前端的内容的键值对。
重要 每个键值对必须是一个 单独的块!在每个块中,您可以定义一个 键,这个键将用于在JSON响应中存储该块的内容。然后您可以为此键设置一个值或内容。只使用一个输入(文本行、文本编辑器、媒体选择等)。
屏幕截图显示了Sulu中使用api-content模板的内容页面。这里定义了三个键值。
- 一个键为
headline-1,值为这是一条标题 - 一个键为
image-user,值为从管理员区域的媒体库中选择的图像。 - 一个键为
article-1,值为在富文本编辑器中编写的格式化文本。
在浏览器中对 http://canvas.lo/api-content-canvas 的请求将返回以下JSON。 注意: 上面的URL基于我的本地设置,并且将根据您在虚拟主机设置中定义的URL而有所不同。 /api-content-canvas 部分在内容页面中定义,且是可选的。
{
"url": "/api-content-canvas",
"title": "canvas",
"headline-1": "this is a headline",
"image-user": "/media/1/download/penguin.jpeg?v=1",
"article-1": "<p><strong>yeah, this is a bold text</strong></p>\n\n<p> </p>\n\n<p>asdasdad</p>\n"
}
让我们更详细地了解一下
响应中的 url 是您在浏览器中请求的URL,不包含区域和基本URL。
"url": "/api-content-canvas",
响应中的 title 是Sulu中定义的内容页面标题。
"title": "canvas",
响应中的 headline-1 是JSON响应中的第一个动态键。它是Sulu中第一个键值块中定义的。此键的名称完全由您决定。
"headline-1": "this is a headline",
响应中的 image-user 键是Sulu中的媒体选择。在那里,您可以从Sulu易于管理的媒体库中选择一个文件。该文件的相对路径将被返回。此路径是分版本的。
"image-user": "/media/1/download/penguin.jpeg?v=1",
JSON响应中的 article-1 键包含Sulu提供的富文本编辑器输入的内容。如你所见,它是HTML,可以直接用于前端,并按原样格式化。
"article-1": "<p><strong>yeah, this is a bold text</strong></p>\n\n<p> </p>\n\n<p>asdasdad</p>\n"