DropDownList в фильтре GridView

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
remix
Сообщения: 59
Зарегистрирован: 2018.01.01, 18:24

DropDownList в фильтре GridView

Сообщение remix »

Приветствую всех.

Не могу понять как сделать простой выпадающий DropDownList в фильтре GridView. Есть у меня колонка в таблице "Width" там всего 3 значения - хочу сделать по колонке DropDownList - вот мой код:

Код: Выделить всё

//'width',
             [
                /**
                 * Название поля модели
                 */
                'attribute' => 'width',
                /**
                 * Формат вывода.
                 * В этом случае мы отображаем данные, как передали.
                 * По умолчанию все данные прогоняются через Html::encode()
                 */
                'format' => 'raw',
                /**
                 * Переопределяем отображение фильтра.
                 * Задаем выпадающий список с заданными значениями вместо поля для ввода
                 */
                'filter' => [
                    0 => '1000',
                    1 => '2000',
                    3 => '3000',
                ],                 
                
            ],
Фильтр DropDownList виден - но когда выбираю значение - то Pjax показывает пустую таблицу. Когда выбираю пустое поле - то Pjax показывает всю таблицу.

Прошу Вашей помощи - как мне настроить фильтр по колонке?
dmg
Сообщения: 685
Зарегистрирован: 2012.10.15, 03:09

Re: DropDownList в фильтре GridView

Сообщение dmg »

Смотрите что в POST запросе уходит и что SearchModel ищет.
remix
Сообщения: 59
Зарегистрирован: 2018.01.01, 18:24

Re: DropDownList в фильтре GridView

Сообщение remix »

dmg писал(а): 2018.02.19, 21:29 Смотрите что в POST запросе уходит и что SearchModel ищет.
Вы правы - посмотрел что улетала цифра 1 или 2 или 3. Изменил на такой код:

Код: Выделить всё

//'width',
             [
                /**
                 * Название поля модели
                 */
                'attribute' => 'width',
                /**
                 * Формат вывода.
                 * В этом случае мы отображаем данные, как передали.
                 * По умолчанию все данные прогоняются через Html::encode()
                 */
                'format' => 'raw',
                /**
                 * Переопределяем отображение фильтра.
                 * Задаем выпадающий список с заданными значениями вместо поля для ввода
                 */
                'filter' => [
                    1000 => '1000',
                    2000 => '2000',
                    3000 => '3000',
                ],                 
                
            ],
Теперь фильтр работает :D Спасибо большое...

Подскажите пожалуйста, а если у меня значений больше например 50 - их все так же описывать вручную? Или есть функция для этого дела?
dmg
Сообщения: 685
Зарегистрирован: 2012.10.15, 03:09

Re: DropDownList в фильтре GridView

Сообщение dmg »

гуглите как массив создавать в цикле.
remix
Сообщения: 59
Зарегистрирован: 2018.01.01, 18:24

Re: DropDownList в фильтре GridView

Сообщение remix »

dmg писал(а): 2018.02.19, 22:28 гуглите как массив создавать в цикле.
Спасибо большое, я сформировал массив и присвоил его: 'filter' => $mass,


Остался последний вопрос - как дать название пустому полю, которое показывает Всё в таблице?

Чтобы в поле по умолчанию было написано "Все позиции" или "Фильтр по столбцу". ?
dmg
Сообщения: 685
Зарегистрирован: 2012.10.15, 03:09

Re: DropDownList в фильтре GridView

Сообщение dmg »

Это вам домашнее задание на ночь. Придётся немного html поучить.
Аватара пользователя
maleks
Сообщения: 1985
Зарегистрирован: 2012.12.26, 12:56

Re: DropDownList в фильтре GridView

Сообщение maleks »

Код: Выделить всё

'filterInputOptions' => ['class' => 'form-control filter-director', 'id' => null, 'prompt' => 'Все позиции']
Yii2 universal module sceleton - for basic and advanced templates
andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: DropDownList в фильтре GridView

Сообщение andku83 »

Можно и проще:

Код: Выделить всё

                'filter' => [
                    '' => 'Все позиции'
                    1000 => 1000,
                    2000 => 2000,
                    3000 => 3000,
                ], 
remix
Сообщения: 59
Зарегистрирован: 2018.01.01, 18:24

Re: DropDownList в фильтре GridView

Сообщение remix »

maleks писал(а): 2018.02.20, 07:53

Код: Выделить всё

'filterInputOptions' => ['class' => 'form-control filter-director', 'id' => null, 'prompt' => 'Все позиции']
Огромнейшее Вам спасибо!!! Всё настроил и всё работает как часы :mrgreen:
remix
Сообщения: 59
Зарегистрирован: 2018.01.01, 18:24

Re: DropDownList в фильтре GridView

Сообщение remix »

Появилась еще 1 проблема с фильтром:

У меня в таблице GridView есть колонка - Вес в тоннах:

Ассоциативный массив фильтра по Весу имеет вид:

Код: Выделить всё

Array ( [0.525] => 0.525 тн. [0.625] => 0.625 тн. [0.85] => 0.85 тн. [0.65] => 0.65 тн. [0.875] => 0.875 тн. [0.55] => 0.55 тн. [0.725] => 0.725 тн. [0.9] => 0.9 тн. [0.575] => 0.575 тн. [0.75] => 0.75 тн. [0.975] => 0.975 тн. [0.6] => 0.6 тн. [1] => 1 тн. )
Так вот с целыми числами 'filter' => $massweight, фильтрует колонки в GridView, а когда выбираю 0.525 или 0.875 или любое другое не целое число GridView выводит строчку: "Ничего не найдено."

В PHPMyAdmin поле weight имеет тип float. Я смотрел Ajax запросы - показывает вот что:

Код: Выделить всё

SELECT COUNT(*) FROM `product` WHERE (`category_id`=1) AND (`weight`='0.525')
То есть значение проходит в запросе к Базе, но ответа нет, и ошибку Ajax не выдает.

Что думать даже не знаю - может кто сталкивался с такой проблемой? Прошу Вашей поддержки.

Код фильтра по полю:

Код: Выделить всё

[
                /**
                 * Название поля модели
                 */
                'attribute' => 'weight',
                /**
                 * Формат вывода.
                 * В этом случае мы отображает данные, как передали.
                 * По умолчанию все данные прогоняются через Html::encode()
                 */
                'format' => 'text',
                /**
                 * Переопределяем отображение фильтра.
                 * Задаем выпадающий список с заданными значениями вместо поля для ввода
                 */
                'filter' => $massweight,
                'headerOptions' => ['width' => '140'], 
                'filterInputOptions' => ['class' => 'form-control filter-director', 'id' => null, 'prompt' => 'Все позиции'],                 
            ],
Массив Веса формирую так:

Код: Выделить всё

# Формируем массив - вес товара
	foreach ($Products as $value) {										
	$massweight[$value['weight']] = $value['weight'].' тн.';
}
andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: DropDownList в фильтре GridView

Сообщение andku83 »

remix
Сообщения: 59
Зарегистрирован: 2018.01.01, 18:24

Re: DropDownList в фильтре GridView

Сообщение remix »

shnir писал(а): 2018.02.20, 16:23 поменяй float на decimal
http://blog.sergey-lysenko.ru/2014/01/f ... mysql.html

Ребята - сменил float на decimal - теперь все 10 000 товаров стали Весом по 1 тонне :shock: то есть все товары стали весить 1 тонну :|

Ладно с этим я разберусь - благо есть backup базы. Но, когда стоит decimal то я не могу проставить числа 0.85 или 0.456 вообщем не дает проставить числа с точкой. Пытался ставить запятую 0,85 или 0,456 но тоже в базу данных не записываются такие цифры и выдает ошибку.

Как быть то? подскажите пожалуйста...
urichalex
Сообщения: 994
Зарегистрирован: 2015.08.07, 11:03

Re: DropDownList в фильтре GridView

Сообщение urichalex »

decimal(6,3)
remix
Сообщения: 59
Зарегистрирован: 2018.01.01, 18:24

Re: DropDownList в фильтре GridView

Сообщение remix »

urichalex писал(а): 2018.02.20, 20:53 decimal(6,3)
Спасибо большое разобрался :D
remix
Сообщения: 59
Зарегистрирован: 2018.01.01, 18:24

Re: DropDownList в фильтре GridView

Сообщение remix »

Ребята последний вопрос по GridView.

Есть одно поле где происходит фильтрация - мне нужно скрыть это поле - как это сделать я не могу понять. Везде написано как скрыть на всех полях фильтрацию, а мне нужно только по одному столбцу - не могу найти.

Подскажите пожалуйста.
remix
Сообщения: 59
Зарегистрирован: 2018.01.01, 18:24

Re: DropDownList в фильтре GridView

Сообщение remix »

Разобрался сам - нужно было в правилах удалить значение )))
Аватара пользователя
Dominus
Сообщения: 892
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: DropDownList в фильтре GridView

Сообщение Dominus »

Код: Выделить всё

//...
    [
        'attribute' => 'attributeName',
        'filter' => false, // Отключаем фильтр
        'format' => 'raw',
        //...
    ],
//...
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
remix
Сообщения: 59
Зарегистрирован: 2018.01.01, 18:24

Re: DropDownList в фильтре GridView

Сообщение remix »

Dominus писал(а): 2018.02.21, 00:54

Код: Выделить всё

//...
    [
        'attribute' => 'attributeName',
        'filter' => false, // Отключаем фильтр
        'format' => 'raw',
        //...
    ],
//...
Оказывается так просто :)
А я его в RULES - это поле удалял и оно переставало показываться... спасибо за поддержку!
Ответить