1

modeladmin を使用して、多数のイベント DataObject を表示しています。

クライアントがソートできるようにしたい要約フィールドにいくつかの列を追加しました。現在、デフォルトではタイトルのみがソート可能です。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';

}
4

1 に答える 1

10

編集フォームをオーバーライドして GridField 内にアクセスする方法について、doc.silverstripe.org にいくつかの情報を追加しました (リンク)。関連するビット(ユースケースに適合):

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()あります。

于 2012-11-15T21:30:46.900 に答える