我创建了Album
DataObject
,如下所示,通过ModelAdmin
在cms中进行管理。
在搜索过滤器中,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
,但我不想使用它们,因为我想在搜索表单中自定义表单字段。
答案 0 :(得分: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
);
}