Silverstripe DataObject - 拖放排序

Sho*_*hon 3 drag-and-drop silverstripe

Silverstripe DataObject - 我想将拖放排序添加到当前的类中,该类扩展了像页面一样的数据对象.因此,当它被删除时,它会更新该视图中所有数据对象的OrderBy字段.我创建了这个类,并且可以一次自由编辑一个项目,但是简单的拖放排序会使它变得如此简单,但我目前只能在Pages上看到Dataobjects上的任何此类扩展.

3dg*_*goo 6

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

要使其正常工作,您需要安装其中一个模块,向自定义DataObject类添加排序字段,并将模块排序对象组件添加到您的GridFieldConfig.

SortableGridField

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

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

对于以下示例,我将使用HomePageSlideDataObject 具有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

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)