我很努力在管理員的一個成員彙總字段中添加排序功能。如何在Silverstripe admin中爲成員列表添加可排序列?
我已經延長使用Silverstripe成員類:
class MyMemberExtension extends DataExtension
我在管理增加了一些字段的默認gridfield:
private static $db = array(
'Organisation' => 'Varchar(100)'
);
private static $summary_fields = array(
'FirstName' => 'First Name',
'Surname' => 'Surname',
'Email' => 'Email',
'OrganisationName' => 'Organisation Name',
'LastVisited' => 'Last Visited',
'NumVisit' => 'Num Visits'
);
private static $casting = array(
'OrganisationName' => 'Varchar(100)'
);
public function getOrganisationName() {
return $this->owner->Organisation;
}
...這所有的作品很好。
但是,只有像LastVisited這樣的核心字段纔會在列標題上給我排序箭頭。
我目前堅持如何在我的組織字段上實施排序。我嘗試添加:
public function getCMSFields()
{
$fields = parent::getCMSFields();
$grid = $fields->dataFieldByName('Organisation');
$gridConfig = $grid->getConfig();
$gridConfig->addComponent(new GridFieldSortableHeader());
return $fields;
}
public function getEditForm($id = null, $fields = null) {
$form=parent::getEditForm($id, $fields);
$model = singleton($this->modelClass);
// add sorting if we have a field for...
if (class_exists('GridFieldSortableRows')
&& $model->hasField('Organisation')
&& $gridField=$form->Fields()->dataFieldByName($this->sanitiseClassName($this->modelClass))) {
if($gridField instanceof GridField) {
$gridField->getConfig()->addComponent(new GridFieldSortableRows('Organisation'));
}
}
return $form;
}
...我的課,但我不認爲這甚至被稱爲,因爲即使我剛從這兩個函數沒有什麼變化返回null。
我發現了幾個處理ModelAdmin擴展但不是核心成員列表的答案。謝謝!
將名爲OrganisationName的「getter」證明是prob LEM。我不確定我爲什麼這麼做,但是由於你的評論,我刪除了它,並且評論了我所有的嘗試讓組織可以排序的方式 - 而Silverstripe在默認情況下使它可以排序! 我也測試過你的答案,通過實現它爲一個不同的自定義字段,它需要一個getter來格式化它。它完美地工作,歡呼。 –