Sho*_*hon 3 drag-and-drop silverstripe
Silverstripe DataObject - 我想将拖放排序添加到当前的类中,该类扩展了像页面一样的数据对象.因此,当它被删除时,它会更新该视图中所有数据对象的OrderBy字段.我创建了这个类,并且可以一次自由编辑一个项目,但是简单的拖放排序会使它变得如此简单,但我目前只能在Pages上看到Dataobjects上的任何此类扩展.
在SilverStripe 3.1中,有一些出色的模块可以为您提供这种功能.其中两个模块是SortableGridField和GridFieldExtensions.
要使其正常工作,您需要安装其中一个模块,向自定义DataObject类添加排序字段,并将模块排序对象组件添加到您的GridFieldConfig.
该SortableGridField模块专门用于允许对象上的对象进行排序GridField.
要实现此功能,您需要向自定义DataObject类添加排序字段,并将其GridFieldSortableRows()作为组件添加到您的自定义类中GridField.
对于以下示例,我将使用HomePage与SlideDataObject 具有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;
}
}
Run Code Online (Sandbox Code Playgroud)
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;
}
}
Run Code Online (Sandbox Code Playgroud)
该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'));
...
}
Run Code Online (Sandbox Code Playgroud)