本文介绍了Silverstripe DataObject - 拖放顺序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

解决方案

在SilverStripe 3.1中有一些优秀的模块可以给你这样的功能。其中两个模块是和。要获得这些工作,您需要安装其中一个模块,请在自定义的 DataObject 类中添加一个排序字段并将模块排序对象组件添加到您的 GridFieldConfig





模块专门用于允许对 GridField



要获得这个工作,您需要在自定义的 DataObject中添加一个排序字段 class,并将 GridFieldSortableRows()添加为 GridField 的组件。



对于以下示例,我将使用 HomePage 作为与$ code的has_many关系的页面>幻灯片 DataObject。



幻灯片



  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 ='幻灯片';

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

$ fields-> removeByName('SortOrder');

return $ fields;
}

}



HomePage



  class HomePage extends Page {

private static $ has_many = array(
'幻灯片'=>'幻灯片'
);

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

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

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

return $ fields;
}

}





GridFieldExtensions 模块包含来控制GridField上的排序顺序,就像 SortableGridField 模块一样。它还有其他有用的 GridField 工具。要实现这一点,您需要在自定义的 DataObject 类中添加一个排序字段,然后添加 GridFieldOrderableRows()作为您的 GridField 的组件。



你的代码就像上面的例子,除了添加到你的 GridFieldConfig 的组件是 GridFieldOrderableRows

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

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

...
}


Silverstripe DataObject - I want to add drag and drop ordering to a current Class that extends dataobject like what exists for pages. So when dropped it updates an OrderBy field for all the dataobjects in that view. I created the class and can freely edit one item at a time, but a simple drag and drop ordering would make it so much easier but I can not see any such extensions currently on Dataobjects only on Pages.

解决方案

In SilverStripe 3.1 there are a few excellent modules that give you this sort of functionality. Two of these modules are SortableGridField and GridFieldExtensions.

To get this working you need to install one of these modules, add a sort field to your custom DataObject class and add the module sort object component to your GridFieldConfig.

SortableGridField

The SortableGridField module is specifically to allow sorting functionality for objects on a GridField.

To get this working you need to add a sort field to your custom DataObject class and add GridFieldSortableRows() as a component to your GridField.

For the following examples I will use HomePage as the page with a has_many relationship to a Slide DataObject.

Slide

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;
    }

}

HomePage

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

The GridFieldExtensions module contains GridFieldOrderableRows to control the sort order on a GridField, just like the SortableGridField module. It also has other useful GridField tools.

To get this working you need to add a sort field to your custom DataObject class and add GridFieldOrderableRows() as a component to your GridField.

Your code would be just like the above example except the component you add to your GridFieldConfig is GridFieldOrderableRows:

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

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

        ...
    }

这篇关于Silverstripe DataObject - 拖放顺序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-30 22:37