arillo/silverstripe-elements

组件

安装次数: 3,286

依赖项: 1

建议者: 0

安全: 0

星标: 5

关注者: 8

分支: 1

公开问题: 11

语言:HTML

类型:silverstripe-vendormodule

2.2.9 2022-03-25 10:24 UTC

README

最新稳定版本  总下载量

通过多个命名元素关系装饰 SiteTree 类,通过 has_many "Elements" 关系。

要求

SilverStripe CMS ^4.0

对于此模块的 SilverStripe 3.x 兼容版本,请参阅 1 分支,或 0.x 版本线

待办事项

  • 编写测试
  • 编写更好的文档

使用方法

在 _config/elements.yml 中设置你的关系类型,例如

Page:
  element_relations:
    Elements:
      - Element
      - DownloadElement
    Downloads:
      - DownloadElement

在此示例中,我们正在创建 2 个元素关系到页面,一个称为 Elements,另一个称为 Downloads。

为了使其工作,Element 类应该继承自 ElementBase,其中可以定义所有附加字段,例如

class Element extends ElementBase
{
    private static
        $singular_name = 'Base element',
        $db = [
            'Title' => 'Text',
            'Subtitle' => 'Text',
            ...
            ..
            .
        ]
    ;
}

在 SiteTree 实例中,元素关系现在可以通过以下方式访问

$pageInst->ElementsByRelation('Elements');
$elementInst->ElementsByRelation('Elements');

在模板中使用它们

<% loop $ElementsByRelation(Elements) %> $Render($Pos, $First, $Last, $EvenOdd)
<% end_loop %>

注意:我们传递了 $Pos, $First, $Last 和 $EvenOdd 值,以便在模板中作为 $IsPos, $IsFirst, $IsLast 和 $IsEvenOdd 可用。

还有一个辅助函数可以将网格字段移动到另一个标签页

public function getCMSFields()
{
    $fields = parent::getCMSFields();
    // move the elements gridfield to a tab called 'PageElements'..
    $fields = ElementsExtension::move_elements_manager($fields, 'Elements', 'Root.PageElements');
    return $fields;
}

嵌套元素关系

将相同的扩展应用到元素而不是页面。

TeasersElement:
  element_relations:
    Teasers:
      - TeaserElement

元素继承

如果您想将相同的元素应用到不同的 Pagetypes,可以使用 element_relations_inherit_from 定义在 yml 文件中引用的任意设置。例如,如果我们想让 HomePage 和 EventsPage 继承相同的元素,我们可以像这样定义 .yml

HomePage:
  element_relations_inherit_from: MainElements
EventsPage:
  element_relations_inherit_from: MainElements

它们都引用在 yml 中定义的 MainElements,其中定义了元素关系,例如

MainElements:
  element_relations:
    Elements:
      - HeroElement
      - DownloadElement
      - TeasersElement

如果您继承了元素,您仍然可以创建您自己的自定义关系,也可以将新的 Element 类型添加到继承的关系中。

HomePage:
  element_relations_inherit_from: MainElements
  element_relations:
    Elements:
      - ImageElement

在此示例中,ImageElement 被添加到在 MainElements 中定义的可用的 Elements 列表中。

URLSegmentField

如果您想在 cms 中显示 URLSegment 字段,可以通过配置 show_urlsegment_field 进行选择

ElementBase:
  show_urlsegment_field: true

批量上传

支持使用 Colymba\BulkUpload\BulkUploader 对单个元素进行关系。例如,给定以下关系

ImagesElement:
  element_relations:
    Images:
      - ImageElement # an element with a has_one Image (Image) relation

您可以在 ImagesElement 中应用批量上传

use Arillo\Elements\BulkUploader;

public function getCMSFields()
    {
        $fields = parent::getCMSFields();
        if ($images = $fields->dataFieldByName('Images')) {
            BulkUploader::apply(
                $images,
                [
                    BulkUploader::ELEMENT_CLASSNAME => ImageElement::class,
                    BulkUploader::ELEMENT_RELATIONNAME => 'Images',
                    BulkUploader::FOLDER_NAME => 'FancyFolderName', // optional
                    BulkUploader::FILE_RELATIONNAME => 'File',  // optional, may be mandatory if you element has multiple has_one file relations
                ]
            );
        }
        return $fields;
    }

翻译

通过 silverstripes i18n 对 TabGridField 标签进行命名,可以完成这项任务,有一个特殊的键名为 Element_Relations,用于完成此任务,例如在 de.yml 中

de:
  Element_Relations:
    Downloads: "Dateien"

填充默认元素

在 Element GridField 下方有一个按钮,称为“创建默认元素”,它将填充在 _config.yml 中定义的默认元素作为页面的空元素。如果再次触发该操作,它将检查已创建的元素,并且不会添加任何重复项。

您可以为每个关系定义 element_defaults,例如

Page:
  element_relations:
    Teasers:
      - TeaserElement
  element_defaults:
    Teasers:
      - TeaserElement

Fluent 集成

要使用 Fluent 与元素一起使用,只需将 Fluent 扩展添加到 ElementBase

Arillo\Elements\ElementBase:
  extensions:
    - 'TractorCow\Fluent\Extension\FluentVersionedExtension'
    - 'TractorCow\Fluent\Extension\FluentFilteredExtension'

选项

当只有一个关联关系可用时,使用制表符代替内联字段。

Arillo\Elements\ElementsExtension:
  use_custom_tab: true

变更日志

2.2.5

  • 移除了Fluent记录的自动删除功能。

2.1.9

– 添加了对SS 4.4 GridFieldDetailForm::setShowAdd的支持 - 移除了'onAfterDelete'钩子,如果需要自动删除,请添加

Arillo\Elements\ElementsExtension:
  cascade_deletes:
    - Elements

2.1.8

  • 添加了对批量上传的支持。

2.1.0

  • 移除了Fluent Locales的自动创建,请使用Arillo\Utils\FluentFilteredHelper代替。

  • 重构GridField概览显示:添加了getCMSTypeInfogetCMSSummary函数。

2.0.0

  • SilverStripe 4 兼容性

0.2.0

  • 移除DefaultElementsExtension
  • 在元素详情表单中添加发布页面按钮

0.1.0

  • 从您的mysite/_config/elements.yml中移除扩展
ElementBase:
  extensions:
    - arillo\elements\ElementsExtension

Page:
  extensions:
    - arillo\elements\ElementsExtension