Страница 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
Ну очень очевидно :) Спасибо