2014-06-07 46 views
0

我創建了一個AlbumDataObject,如下所示,通過ModelAdmin在cms中進行管理。重寫getCustomSearchContext在銀條中不起作用

在搜索過濾器,Name是唯一的輸入字段。我也想顯示一個Author輸入字段。

所以我試圖重寫getCustomSearchContext()功能,但是這是行不通的。

class Album extends DataObject { 

    private static $db = array(
     'Name' => 'Varchar(200)', 
     'Author' => 'Varchar(200)', 
    ); 

    private static $has_many = array(
     'Genres' => 'Genre' 
    ); 


    public function getCustomSearchContext() { 
     $fields = $this->scaffoldSearchFields(array(
      'restrictFields' => array() 
     )); 

     $filters = array(
      'Name' => new PartialMatchFilter('Name'), 
      'Author' => new PartialMatchFilter('Author') 
     ); 

     return new SearchContext(
      $this->class, 
      $fields, 
      $filters 
     ); 
    } 

} 

我知道我們可以用$searchable_fields但我不希望使用他們,因爲我想自定義表單字段的搜索表單。

回答

1

在Silverstripe 3.1.5,它看起來像getCustomSearchContext()不存在了。請使用getDefaultSearchContext()

我還創建了一個FieldList和推動領域

public function getDefaultSearchContext() { 
    $fields = new FieldList(); 
    $fields->push(new TextField('Name', 'Name')); 
    $fields->push(new TextField('Author', 'Author')); 

    $filters = array(
     'Name' => new PartialMatchFilter('Name'), 
     'Author' => new PartialMatchFilter('Author') 
    ); 

    return new SearchContext(
     $this->class, 
     $fields, 
     $filters 
    ); 
} 
+0

嗨,如果不忙,我可以問。你是怎麼找到答案的 –

+0

Hi Thomas。好問題。在檢查文檔和各種測試後,我檢查了Silverstripe api中的['DataObject'](http://api.silverstripe.org/3.1/class-DataObject.html#_getDefaultSearchContext)類。我注意到沒有'getCustomSearchContext()'函數,但有一個'getDefaultSearchContext()'函數。 – 3dgoo