zauberfisch / silverstripe-page-builder
SilverStripe模块,允许在SilverStripe中使用模块化和基于块的页面内容
v2.0.1
2021-01-23 07:14 UTC
This package is auto-updated.
Last update: 2024-09-27 03:42:11 UTC
README
SilverStripe模块,允许在SilverStripe中使用模块化和基于块的页面内容
维护者联系方式
- Zauberfisch code@zauberfisch.at
要求
- silverstripe/framework >=3.7
- zauberfisch/silverstripe-serialized-dataobject >=3.0
- zauberfisch/silverstripe-namespace-templates >=1.0
安装
-
composer require "zauberfisch/silverstripe-page-builder"
-
可选:安装建议的包
- composer require
"zauberfisch/silverstripe-page-builder-basic-blocks"
- composer require
-
重建清单(刷新)
-
不幸的是,SilverStripe当前的一个错误破坏了CMS中子控制器内的HTMLEditorField文件管理,为了解决这个问题,需要采取以下措施
在你的项目
.htaccess
中,将RewriteRule .* framework/main.php?url=%1 [QSA]
替换为RewriteRule .* index.php?url=%1 [QSA]
,并创建一个index.php
文件(如果你的服务器支持mod_rewrite,可以替换默认的SilverStripe文件)并包含以下内容<?php if (isset($_GET['ID'])) { # redirect as workaround for inset File dialog in the PageBuilder # which is broken because ?ID=<$fileID> is mistaken for a Page ID by LeftAndMain # lets replace ID with FileID which is then converted back in PageBuilder $match = true; $url = $_GET['url']; foreach(['PageBuilder', 'EditorToolbar', 'viewfile'] as $str) { if (strpos($url, $str) === FALSE) { $match = false; break; } } if ($match) { $id = $_GET['ID']; $_GET['url'] = str_replace(['?ID=','&ID='],['?FileID=','&FileID='], $url); $_REQUEST['FileID'] = $id; $_GET['FileID'] = $id; unset($_REQUEST['ID']); unset($_GET['ID']); } } chdir('framework'); require 'framework/main.php';
文档
将PageBuilder DB字段和FormField添加到任何DataObject中,例如页面
class Page extends SiteTree {
private static $db = [
'PageBuilder' => \zauberfisch\PageBuilder\Model\DBField::class,
];
public function getCMSFields() {
$fields = parent::getCMSFields();
$fields->addFieldsToTab('Root.Main', [
new \zauberfisch\PageBuilder\Form\Field('PageBuilder', $this->fieldLabel('PageBuilder')),
]);
return $fields;
}
}
现在,在你的模板中,你可以访问$PageBuilder并输出内容
<% if $PageBuilder %>
<div class="my-content-blocks">
$PageBuilder.Value
</div>
<% end_if %>
请参阅docs/example.md以获取带有一些基本前端的项目示例文件。
然而,在这个基本安装中,此模块不提供任何内容类型。它只提供抽象类和表单字段。
就像SilverStripe DataObjects一样,定义所需的数据类型取决于个别开发人员和其他模块。
有关一些基本块类型的良好起点可以在基本块模块中找到。
尚未编写创建自定义块的文档,请参阅基本块模块,它们可以作为良好的示例。
已知问题
- 当与Translatable一起使用此模块时,HTMLEditorField插入链接对话框中的TreeDropdownField语言选择不起作用
- 对话框内的GridFields可能不起作用
- 复制记录将复制块,但ContentBlocks仍通过其ID进行链接,因此现在两个对象共享同一个ContentElement
- 过时的ContentElement DataObjects没有被删除(例如,如果创建了文本块,但页面从未保存)
- 编辑对话框对于需要对话框的嵌套内容(HTMLEditor、GridField等)来说不是理想的。