银条。在 ModelAdmin 中按日期范围搜索
Posted
技术标签:
【中文标题】银条。在 ModelAdmin 中按日期范围搜索【英文标题】:SilverStripe. Search by date-range in ModelAdmin 【发布时间】:2017-07-15 09:58:17 【问题描述】:我的 DataObject 中有日期属性。
如何在 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 ...'
],
];
另外搜索字段必须使用日历(日期选择器)
DateField:
default_config:
showcalendar: true
你能举例说明如何按日期范围搜索吗?
【问题讨论】:
一个快速的谷歌搜索告诉我gist.github.com/dljoseph/de44dce46b2194661381这可能对你有帮助 【参考方案1】:有一个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 中按日期范围搜索的主要内容,如果未能解决你的问题,请参考以下文章