nyeholt/silverstripe-multirecordeditor

一个在单个界面中编辑多个记录的模块。

安装数: 3,675

依赖关系: 1

建议者: 0

安全性: 0

星标: 3

关注者: 1

分支: 2

开放问题: 0

类型:silverstripe-vendormodule

dev-master / 2.0.x-dev 2019-08-14 11:06 UTC

This package is auto-updated.

Last update: 2024-09-14 22:06:51 UTC


README

在一个编辑界面中编辑多个字段。

需求

  • SilverStripe ^4.1

安装

许可证

许可证

解决的问题

在某些网站上,可能希望从管理页面相关对象的编辑过程中移除一些复杂性,只允许编辑这些对象,而不是对其添加和删除有完全控制。

通过为高级用户提供网格字段来添加、重新排序和删除对象,并为内容提供仅可编辑的字段,可以同时满足这两种使用模式。

文档

private static $has_many = array('Elements' => 'BaseElement');

$editor = MultiRecordEditingField::create('Elements', 'Content Cells', $this->Elements());
$fields->addFieldToTab('Root.Elements', $editor);

示例

class Page extends SiteTree {

	private static $has_many = array(
        'Cells'      => 'BasicContent',
    );

    public function getCMSFields()
    {
        $fields = parent::getCMSFields();

        $editor = MultiRecordEditingField::create('ContentCellEditor', 'Content Cells', $this->Cells());
        $fields->addFieldToTab('Root.ContentCells', $editor);

        if (Permission::check('ADMIN')) {
            $config = GridFieldConfig_RecordEditor::create();
            $grid = GridField::create('Cells', 'Cells', $this->Cells(), $config);
            $fields->addFieldToTab('Root.ContentCells', $grid);
        }

        return $fields;
    }
}

class Page_Controller extends ContentController {}


class BasicContent extends DataObject
{
    private static $db = array(
        'Title'     => 'Varchar(255)',
        'Description'   => 'Text',
        'Content'       => 'HTMLText',
    );

    private static $has_one = array(
        'Parent'        => 'Page',
    );

    private static $many_many = array(
        'Images'        => 'Image',
    );

    public function getCMSFields()
    {
        $fields = parent::getCMSFields();

        $uploadField = UploadField::create('Images', 'Images', $this->Images());
        $uploadField->setAllowedFileCategories('image');
        $fields->replaceField('Images', $uploadField);

        return $fields;
    }
}

或者,顶级条目可以插入到不同的选项卡中

		// in Page::getCMSFields()
		$i = 0;
        foreach ($this->Cells() as $cell) {
            $editor = MultiRecordEditingField::create('ContentCellEditor' . (++$i), $cell->Title, ArrayList::create(array($cell)));
            $editor->setUseToggles(false);
            $fields->addFieldToTab('Root.' . $cell->Title, $editor);
        }

多编辑-幻觉?

MultiRecordEditingField 支持其他 MultiRecordEditingField 的嵌套。当字段检测到要编辑的字段集中存在 MultiRecordEditingField 时,该字段作为另一个嵌套切换字段添加到父字段集的编辑字段集中。

自定义字段

MultiRecordEditingField 使用 getCMSFields 的输出构建用于编辑的字段列表。要提供一组替代字段,请定义一个返回 FieldList 对象的 multiEditFields 方法。

此外,MultiRecordEditingField 在编辑的 record 上调用 updateMultiEditFields 扩展钩子,以允许扩展更改字段。

前端使用

在构造过程中传入一个布尔标志

MultiRecordEditingField::create('ContentCellEditor', 'Content Cells', $this->Cells(), $frontend = true);

这将触发使用 getFrontEndFields() 而不是 getCMSFields() 来查找字段。

屏幕截图

这允许管理员用户控制页面中可用的编辑元素。

Admin view

而内容作者则提供了一个页面内视图来编辑项目。

Expanded editing view

或者设置在不同的选项卡上。

Tabbed editing view

维护者

错误追踪