Страница 1 из 1
Фильтрация в GridView с помощью DateRangePicker от kartik
Добавлено: 2019.10.11, 12:52
ddmitrenko
Здравствуйте. Использую фильтрацию в GridView с помощью DateRangePicker от kartik. Все работает замечательно, но не могу придумать как сделать сброс фильтра. Помогите, пожалуйста.
Re: Фильтрация в GridView с помощью DateRangePicker от kartik
Добавлено: 2019.10.11, 13:37
yiiliveext
Что именно не получается?
Re: Фильтрация в GridView с помощью DateRangePicker от kartik
Добавлено: 2019.10.11, 13:58
ddmitrenko
После установки диапазона дат, происходит выборка данных. Как вернутся в первоначальное состояние (без фильтра по дате)?
Вот код
Код: Выделить всё
[
'attribute' => 'date_report',
'format' => 'date',
'filter' => DateRangePicker::widget([
'model' => $searchModel,
'attribute' => 'date_report',
'convertFormat' => true,
'useWithAddon' => true,
'pluginOptions' => [
'format'=>'Y-m-d',
'locale' => [
'format' => 'd.m.Y',
'separator' => ' | ',
],
],
Re: Фильтрация в GridView с помощью DateRangePicker от kartik
Добавлено: 2019.10.11, 14:15
yiiliveext
Стереть диапазон и нажать Enter. Естественно в searchModel обработать ситуацию с пустым полем.
Re: Фильтрация в GridView с помощью DateRangePicker от kartik
Добавлено: 2019.10.11, 14:32
ddmitrenko
ddmitrenko писал(а): ↑2019.10.11, 13:58
После установки диапазона дат, происходит выборка данных. Как вернутся в первоначальное состояние (без фильтра по дате)?
Вот код
Код: Выделить всё
[
'attribute' => 'date_report',
'format' => 'date',
'filter' => DateRangePicker::widget([
'model' => $searchModel,
'attribute' => 'date_report',
'convertFormat' => true,
'useWithAddon' => true,
'pluginOptions' => [
'format'=>'Y-m-d',
'locale' => [
'format' => 'd.m.Y',
'separator' => ' | ',
],
],
Уточнение по коду -
Код: Выделить всё
[
'attribute' => 'date_report',
'format' => 'date',
'filter' => DateRangePicker::widget([
'model' => $searchModel,
'attribute' => 'date_report',
'convertFormat' => true,
'presetDropdown' => TRUE, !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
'useWithAddon' => true,
'pluginOptions' => [
'format'=>'Y-m-d',
'locale' => [
'format' => 'd.m.Y',
'separator' => ' | ',
],
],
Не дает возможность стереть диапазон
Re: Фильтрация в GridView с помощью DateRangePicker от kartik
Добавлено: 2019.10.11, 14:35
yiiliveext
Кто мешает установить presetDropdown в false?
Re: Фильтрация в GridView с помощью DateRangePicker от kartik
Добавлено: 2019.10.11, 14:41
ddmitrenko
yiiliveext писал(а): ↑2019.10.11, 14:35
Кто мешает установить presetDropdown в false?
Ни кто, просто тогда функционал связанный с выпадающим окном отсутствует.
Re: Фильтрация в GridView с помощью DateRangePicker от kartik
Добавлено: 2019.10.11, 17:28
yiiliveext
ddmitrenko писал(а): ↑2019.10.11, 14:41
yiiliveext писал(а): ↑2019.10.11, 14:35
Кто мешает установить presetDropdown в false?
Ни кто, просто тогда функционал связанный с выпадающим окном отсутствует.
Со встроенными диапазонами можно как-то так
Код: Выделить всё
[
'attribute' => 'date_report',
'format' => 'date',
'filter' => DateRangePicker::widget([
'model' => $searchModel,
'attribute' => 'date_report',
'convertFormat' => true,
'presetDropdown' => TRUE, !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
'useWithAddon' => true,
'pluginOptions' => [
'format'=>'Y-m-d',
'locale' => [
'format' => 'd.m.Y',
'separator' => ' | ',
],
],
'pluginEvents' => [
"cancel.daterangepicker" => "function(ev, picker) {
var input = $(picker.element[0]).find('input');
hiddenInput = $(picker.element[0].nextElementSibling);
input.val('').change();
hiddenInput.val('').change();
}",
]
]
Re: Фильтрация в GridView с помощью DateRangePicker от kartik
Добавлено: 2019.10.11, 17:41
ddmitrenko
Работает, спасибо, но есть одно но ... В этот фильтр по-умолчанию ставится текущая дата (и соответственно по-дефолту фильтруется по ней) и если в гриде есть другие фильтры, то их работа становится неоднозначной
Re: Фильтрация в GridView с помощью DateRangePicker от kartik
Добавлено: 2019.10.11, 18:17
yiiliveext
ddmitrenko писал(а): ↑2019.10.11, 17:41
Работает, спасибо, но есть одно но ... В этот фильтр по-умолчанию ставится текущая дата (и соответственно по-дефолту фильтруется по ней) и если в гриде есть другие фильтры, то их работа становится неоднозначной
Это можно побороть только отанаследовавшись от виджета и в методе registerAssets убрать код
Код: Выделить всё
if ($this->presetDropdown && empty($this->value)) {
$js .= <<< JS
var val = {$nowFrom} + '{$this->_separator}' + {$nowTo};
{$id}.find('.range-value').val(val);
{$input}.val(val);
JS;
Еще, как вариант, можно вместо стирания ставить заведомо всегда валидный диапазон. Вроде '01.01.1970 - 01.01.2038'
Re: Фильтрация в GridView с помощью DateRangePicker от kartik
Добавлено: 2019.10.11, 19:16
ddmitrenko
Как ни пытался - ни как не получается поставить валидный диапазон при ИНИЦИАЛИЗАЦИИ модуля.
Re: Фильтрация в GridView с помощью DateRangePicker от kartik
Добавлено: 2019.10.11, 19:31
yiiliveext
ddmitrenko писал(а): ↑2019.10.11, 19:16
Как ни пытался - ни как не получается поставить валидный диапазон при ИНИЦИАЛИЗАЦИИ модуля.
Слабак))
Код: Выделить всё
[
'attribute' => 'date_report',
'format' => 'date',
'filter' => DateRangePicker::widget([
'model' => $searchModel,
'attribute' => 'date_report',
'convertFormat' => true,
'presetDropdown' => TRUE, !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
'useWithAddon' => true,
'options' => ['value' => empty($searchModel->date_report) ? '01.01.1970 - 01.01.2038' : $searchModel->date_report],
'pluginOptions' => [
'format'=>'Y-m-d',
'locale' => [
'format' => 'd.m.Y',
'separator' => ' | ',
],
],
'pluginEvents' => [
"cancel.daterangepicker" => "function(ev, picker) {
var input = $(picker.element[0]).find('input');
hiddenInput = $(picker.element[0].nextElementSibling);
input.val('01.01.1970 - 01.01.2038').change();
hiddenInput.val('01.01.1970 - 01.01.2038').change();
}",
]
]
Re: Фильтрация в GridView с помощью DateRangePicker от kartik
Добавлено: 2019.10.12, 12:26
ddmitrenko
Ну очень очевидно
Спасибо