银条。在 ModelAdmin 中按日期范围搜索
SilverStripe. Search by date-range in ModelAdmin
我的数据对象中有日期-属性。
如何在 ModelAdmin 中按日期范围搜索?
例如:"search all items where date is more than 2007-13-01 and less than 2007-17-01"
或 "search all items where date is between 2007-13-01 and 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 ...'
],
];
}
此外,搜索字段必须使用日历(日期选择器)
DateField:
default_config:
showcalendar: true
能否举例说明如何按日期范围搜索?
有一个 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);
}
我的数据对象中有日期-属性。
如何在 ModelAdmin 中按日期范围搜索?
例如:"search all items where date is more than 2007-13-01 and less than 2007-17-01"
或 "search all items where date is between 2007-13-01 and 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 ...'
],
];
}
此外,搜索字段必须使用日历(日期选择器)
DateField:
default_config:
showcalendar: true
能否举例说明如何按日期范围搜索?
有一个 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);
}