gpt4 book ai didi

drag-and-drop - Silverstripe DataObject - 拖放排序

转载 作者:行者123 更新时间:2023-12-01 10:42:42 24 4
gpt4 key购买 nike

Silverstripe DataObject - 我想向当前类添加拖放排序,该类扩展数据对象,就像页面中存在的那样。因此,当删除时,它会更新该 View 中所有数据对象的 OrderBy 字段。我创建了这个类,一次可以自由编辑一个项目,但是简单的拖放排序会使它变得容易得多,但我目前在仅在页面上的 Dataobjects 上看不到任何此类扩展。

最佳答案

在 SilverStripe 3.1 中,有一些出色的模块可以为您提供此类功能。其中两个模块是 SortableGridFieldGridFieldExtensions .

要实现此功能,您需要安装这些模块之一,将排序字段添加到您的自定义 DataObject 类,并将模块排序对象组件添加到您的 GridFieldConfig

SortableGridField

SortableGridField模块专门允许对 GridField 上的对象进行排序。

要实现此功能,您需要将排序字段添加到您的自定义 DataObject 类,并将 GridFieldSortableRows() 作为组件添加到您的 GridField

对于以下示例,我将使用 HomePage 作为与 Slide 数据对象具有 has_many 关系的页面。

幻灯片

class Slide extends DataObject
{
private static $db = array (
'Title' => 'HTMLText',
'SortOrder' => 'Int'
);

private static $has_one = array (
'HomePage' => 'HomePage'
);

private static $summary_fields = array(
'Title' => 'Title'
);

private static $default_sort = 'SortOrder ASC';
private static $singular_name = 'Slide';
private static $plural_name = 'Slides';

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

$fields->removeByName('SortOrder');

return $fields;
}

}

主页

class HomePage extends Page {

private static $has_many = array (
'Slides' => 'Slide'
);

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

$slidesFieldConfig = GridFieldConfig_RecordEditor::create();
$slidesFieldConfig->addComponent(new GridFieldSortableRows('SortOrder'));

$slidesField = GridField::create(
'Slides',
'Slide',
$this->Slides(),
$slidesFieldConfig
);
$fields->addFieldToTab('Root.Slides', $slidesField);

return $fields;
}

}

GridFieldExtensions

GridFieldExtensions 模块包含 GridFieldOrderableRows控制 GridField 的排序顺序,就像 SortableGridField 模块一样。它还具有其他有用的 GridField 工具。

要实现此功能,您需要将排序字段添加到您的自定义 DataObject 类,并将 GridFieldOrderableRows() 作为组件添加到您的 GridField

除了添加到 GridFieldConfig 的组件是 GridFieldOrderableRows 之外,您的代码与上面的示例类似:

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

$slidesFieldConfig = GridFieldConfig_RecordEditor::create();
$slidesFieldConfig->addComponent(new GridFieldOrderableRows('SortOrder'));

...
}

关于drag-and-drop - Silverstripe DataObject - 拖放排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28844929/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com