zauberfisch/silverstripe-page-builder

SilverStripe模块,允许在SilverStripe中使用模块化和基于块的页面内容

安装: 508

依赖: 1

建议: 0

安全: 0

星标: 3

关注者: 4

分支: 2

开放问题: 1

类型:silverstripe-module

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中使用模块化和基于块的页面内容

维护者联系方式

要求

  • 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"
  • 重建清单(刷新)

  • 不幸的是,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等)来说不是理想的。