Фильтрация в GridView с помощью DateRangePicker от kartik

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
ddmitrenko
Сообщения: 82
Зарегистрирован: 2015.02.04, 16:31

Фильтрация в GridView с помощью DateRangePicker от kartik

Сообщение ddmitrenko »

Здравствуйте. Использую фильтрацию в GridView с помощью DateRangePicker от kartik. Все работает замечательно, но не могу придумать как сделать сброс фильтра. Помогите, пожалуйста.
С уважением, Дмитрий.
yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: Фильтрация в GridView с помощью DateRangePicker от kartik

Сообщение yiiliveext »

Что именно не получается?
ddmitrenko
Сообщения: 82
Зарегистрирован: 2015.02.04, 16:31

Re: Фильтрация в GridView с помощью DateRangePicker от kartik

Сообщение 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' => ' | ',
                    ],
                ],
С уважением, Дмитрий.
yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: Фильтрация в GridView с помощью DateRangePicker от kartik

Сообщение yiiliveext »

Стереть диапазон и нажать Enter. Естественно в searchModel обработать ситуацию с пустым полем.
ddmitrenko
Сообщения: 82
Зарегистрирован: 2015.02.04, 16:31

Re: Фильтрация в GridView с помощью DateRangePicker от kartik

Сообщение 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' => ' | ',
                    ],
                ],
Не дает возможность стереть диапазон
С уважением, Дмитрий.
yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: Фильтрация в GridView с помощью DateRangePicker от kartik

Сообщение yiiliveext »

Кто мешает установить presetDropdown в false?
ddmitrenko
Сообщения: 82
Зарегистрирован: 2015.02.04, 16:31

Re: Фильтрация в GridView с помощью DateRangePicker от kartik

Сообщение ddmitrenko »

yiiliveext писал(а): 2019.10.11, 14:35 Кто мешает установить presetDropdown в false?
Ни кто, просто тогда функционал связанный с выпадающим окном отсутствует.
С уважением, Дмитрий.
yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: Фильтрация в GridView с помощью DateRangePicker от kartik

Сообщение 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();
                                                             }",
               ]
]
ddmitrenko
Сообщения: 82
Зарегистрирован: 2015.02.04, 16:31

Re: Фильтрация в GridView с помощью DateRangePicker от kartik

Сообщение ddmitrenko »

Работает, спасибо, но есть одно но ... В этот фильтр по-умолчанию ставится текущая дата (и соответственно по-дефолту фильтруется по ней) и если в гриде есть другие фильтры, то их работа становится неоднозначной :(
С уважением, Дмитрий.
yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: Фильтрация в GridView с помощью DateRangePicker от kartik

Сообщение 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'
ddmitrenko
Сообщения: 82
Зарегистрирован: 2015.02.04, 16:31

Re: Фильтрация в GridView с помощью DateRangePicker от kartik

Сообщение ddmitrenko »

Как ни пытался - ни как не получается поставить валидный диапазон при ИНИЦИАЛИЗАЦИИ модуля.
С уважением, Дмитрий.
yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: Фильтрация в GridView с помощью DateRangePicker от kartik

Сообщение 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();
                                                             }",
               ]
]
ddmitrenko
Сообщения: 82
Зарегистрирован: 2015.02.04, 16:31

Re: Фильтрация в GridView с помощью DateRangePicker от kartik

Сообщение ddmitrenko »

Ну очень очевидно :) Спасибо
С уважением, Дмитрий.
Ответить