2012-11-15 37 views
1

我正在使用modeladmin來顯示一些事件DataObjects。。在modeladmin中修改gridfieldconfig以添加可排序標頭

我在客戶希望能夠排序的摘要字段中添加了許多列。目前,只有標題默認排序。可以在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'; 

} 
+2

我沒有時間現在正確回答這個問題,但爲了指出正確的方向,您需要重寫'EventAdmin'類中的'getEditForm()'函數。 – drzax

+0

太棒了。謝謝你。這讓我得到我需要的東西。我嘗試了新的GridFieldSortableHeader('DescriptionSummary'),認爲這將允許我通過單擊標題來對描述列進行alpha排序,但它只是創建了一個只有Title可以再次排序的標題行。有任何想法嗎?謝謝 – Fraser

回答

10

我只是增加了一些關於如何覆蓋編輯表單並訪問GridField(link)的信息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()開箱即用的「點符號」。

相關問題