adminのメンバーサマリーフィールドの1つにソート機能を追加しようとしています。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;
}
を...私のクラスには、私はこれらも私は何も変わらないこの2つの関数からnullを返すようにしても、呼び出されている確信していません。
私は、ModelAdminの拡張機能を扱ういくつかの答えを見つけましたが、コアのメンバーリストのものは見つかりませんでした。ありがとう!
OrganisationNameという名前の「ゲッター」がprobレム。なぜ私はそれをしたのか分かりませんが、あなたのコメントのために私はそれを削除し、組織をソート可能にする私の試みをすべてコメントしました - そして、Silverstripeはそれをデフォルトでソート可能にしました! 私は答えをテストしましたが、それをフォーマットするためにゲッターを必要とする別のカスタムフィールド用に実装しました。そして、それは完璧に働いた、歓声。 –