silverstripe v3拖放重新排序问题

时间:2014-10-24 13:26:51

标签: drag-and-drop silverstripe

早上好,

我最近开始研究SilverStripe框架,因为它的评论,最重要的是许可证。我通常使用其他流行的cms系统开发,但他们的许可证是GPL,并不适合这个项目。我的问题是,在模块开发方面没有很好的文档记录。

我想启用一个简单的拖动和放大器删除自定义模块的后端接口上的重新排序,请参阅以下代码:

class MyManager extends ModelAdmin{

    static $managed_models = array('MyTask');       
    static $url_segment = 'mymgr';
    static $menu_title = 'My Manager';

    public function getCMSFields(){ 
        $fields=parent::getCMSFields();
        $fields->addFieldToTab('Root.MyTask', 
            GridField::create(
                    'MyTask', 
                    'Data Object', 
                    $this->MyTask(), 
                    GridFieldConfig_RecordEditor::create() 
                    ->addComponent(new GridFieldSortableRows('Weight'))
            ) 
        );
        return $fields; 
    }

}//class

class MyTask extends DataObject{
    static $db = array(
        'Title' => 'Varchar',
        'Description' => 'Text',
        'Weight' => 'Int',
        'IsActive' => 'Boolean'
    );
}//MyTask

注意:我已经仔细阅读了这篇文章(http://www.silverstripe.org/community/forums/general-questions/show/20323),没有多大帮助。

提前感谢您的协助。

1 个答案:

答案 0 :(得分:2)

如果您使用的是ModelAdmin,则应使用生成CMS表单的getEditForm方法(而非getCMSFields)。因此,您所要做的就是向GridField添加一个组件,并且应该这样做:

public function getEditForm($id = null, $fields = null)
{
  $form = parent::getEditForm($id, $fields);

  $tasksGridField = $form->Fields()->fieldByName('MyTask');

  if ($tasksGridField)
  {
      $tasksGridField->getConfig()->addComponent(new GridFieldSortableRows('Weight'));
  }

  return $form;
}

您可以/还应该向private static $default_sort = 'Weight ASC' DataObject添加MyTask,以便默认情况下以正确的顺序显示它们。