Fla*_*sta 2 search modeladmin silverstripe datefield
我的DataObject中有date-property.
如何在ModelAdmin中按日期范围进行搜索?
例如:"搜索日期大于2007-13-01且小于2007-17-01的
所有项目" 或"搜索日期介于2007-13-01和2007-17-01之间的所有项目"
现在我只能使用GreaterTranFilter或LessThanFilter进行搜索,但不能同时搜索.
class MyObject extends DataObject {
private static $db = [
"Date" => "Date",
];
private static $summary_fields = [
"Date" => "Date",
];
private static $searchable_fields = [
"Date" => [
"field" => "DateField",
"filter" => "GreaterThanFilter",
"title" => 'Date from ...'
],
];
}
Run Code Online (Sandbox Code Playgroud)
此外,搜索字段必须使用日历(datepicker)
DateField:
default_config:
showcalendar: true
Run Code Online (Sandbox Code Playgroud)
你能举例说明如何按日期范围进行搜索吗?
有一个WithinRangeFilter,但如果你只使用配置,它不会让你走得太远.这是您真正需要在程序上实现的.
通过重载添加范围过滤器getSearchContext(),然后重载getList()并检查q日期范围的请求参数,并将它们应用于列表.
public function getSearchContext()
{
$context = parent::getSearchContext();
$context->getFields()->push(DateField::create('q[Start]','Start'));
$context->getFields()->push(DateField::create('q[End]','End'));
return $context;
}
public function getList()
{
$list = parent::getList();
$params = $this->getRequest()->requestVar('q');
$filters = [];
if(isset($params['Start'])) {
$filters['Date:LessThanOrEqual'] = $params['Start'];
}
if(isset($params['End'])) {
$filters['Date:GreaterThanOrEqual'] = $params['End'];
}
return $list->filter($filters);
}
Run Code Online (Sandbox Code Playgroud)