覆盖getCustomSearchContext在silverstripe中不起作用

时间:2014-06-07 07:15:25

标签: php silverstripe

我创建了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,但我不想使用它们,因为我想在搜索表单中自定义表单字段。

1 个答案:

答案 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
    );
}