Silverstripe。在modeladmin中修改gridfieldconfig以添加可排序标头

时间:2012-11-15 03:18:32

标签: silverstripe

我正在使用modeladmin来显示一些事件DataObjects。

我在摘要字段中添加了许多列,客户希望能够对其进行排序。目前,默认情况下只有标题可以排序。是否可以在modeladmin中修改gridfieldconfig?特别是要向GridFieldSortableHeader添加字段?

这是我的事件数据对象,其中包含我需要能够在modeladmin中排序的摘要字段:

......
static $summary_fields = array('Title', 'DescriptionSummary', 'EventStartDate', 'EventEndDate', 'EventVenue');

static $field_labels = array('DescriptionSummary' => 'Description', 'EventStartDate' => 'Start Date', 'EventEndDate' => 'End Date', 'EventVenue' => 'Venue');

private $widget;
//TO GET THE SUMMARY FIELD VALUES
public function getEventVenue(){
    if ($eventVenue = $this->Venue()->Title) return $eventVenue;
    return "No Venue specified";
}

public function getEventStartDate(){
    if ($startDate = DataObject::get_one('CalendarDateTime', 'EventID = '.$this->ID)) return $startDate->StartDate;
    return "No start dates specified";
}

public function getEventEndDate(){
    if ($startDate = DataObject::get_one('CalendarDateTime', 'EventID = '.$this->ID)) return $startDate->EndDate;
    return "No end dates specified";
}
....

和我的活动管理员:

class EventAdmin extends ModelAdmin {

    public static $managed_models = array('CalendarEvent', 'Venue', 'EventCategory');
    static $url_segment = 'events';
    static $menu_title = 'Events';

}

1 个答案:

答案 0 :(得分:10)

我刚刚向doc.silverstripe.org添加了一些信息,介绍如何覆盖编辑表单并访问(link)中的GridField。相关位(适合您的用例):

class EventAdmin extends ModelAdmin {
  // ...

  public function getEditForm($id = null, $fields = null) {
    $form = parent::getEditForm($id, $fields);
    $gridField = $form->Fields()->fieldByName($this->sanitiseClassName($this->modelClass));
    $gridField->getConfig()->getComponentByType('GridFieldSortableHeader')
      ->setFieldSorting(array(...));
    return $form;
  }

}


如果您尝试按CalendarDate关系和EventStartDate字段进行排序,则通常必须覆盖ModelAdmin中的结果列表,请参阅docs。 虽然您可以在那里添加必要的联接(DataQuery->leftJoin),但这是不可能的 在查询中选择其他列。这样只会让你排序 默认情况下为EventStartDate,但不是通过UI重新排序GridField。 它是一个缺失的功能,我们应该真正支持DataList->sort()开箱即用的“点符号”。