GridView filter больше меньше <>=

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

GridView filter больше меньше <>=

Сообщение Shappy » 2014.11.24, 21:05

Добрый день, не могу понять как сделать в GridView фильтры с условиями, чтобы можно было искать допустим >1, <1, <>1 и т.д. Сначала проблема с валидацией, т.к. не пустит >1 если в валидации это integer, а затем проблема с самим запросом... Как это сделать правильно?

Аватара пользователя
futbolim
Сообщения: 2050
Зарегистрирован: 2012.07.08, 19:28

Re: GridView filter больше меньше <>=

Сообщение futbolim » 2014.11.24, 22:31

Не знаю, убрали ли эту фичу, но как бы сделал я:
1. Сначала посмотрел сорцы, вдруг её не убрали.
2. Если её убрали, делать так:
а) валидатор меняем integer -> string
б) в Search модели добавляем метод, который бы чистил все значения инпутов от всяких бяк и оставлял бы символы <, >, =, digits (само собой этим методом обрабатывать только числовые поля)
в) ну и собсна andFilterWhere:

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

$query->andFilterWhere([$your_token, 'your_field', $this->your_field]);
 
Последний раз редактировалось futbolim 2014.11.24, 22:36, всего редактировалось 1 раз.

Аватара пользователя
futbolim
Сообщения: 2050
Зарегистрирован: 2012.07.08, 19:28

Re: GridView filter больше меньше <>=

Сообщение futbolim » 2014.11.24, 22:34

Ну да, эту фичу убрали. У нас же появились Search модели...

Shappy
Сообщения: 86
Зарегистрирован: 2013.09.19, 12:31

Re: GridView filter больше меньше <>=

Сообщение Shappy » 2014.11.24, 22:45

Странно что убрали... Было ведь очень удобно, сразу из коробки... Буду делать как Вы сказали...

Аватара пользователя
futbolim
Сообщения: 2050
Зарегистрирован: 2012.07.08, 19:28

Re: GridView filter больше меньше <>=

Сообщение futbolim » 2014.11.24, 22:58

Shappy писал(а):Странно что убрали... Было ведь очень удобно, сразу из коробки... Буду делать как Вы сказали...
Не спешите, вдруг кто-нибудь что-нибудь лучшее посоветует ;)

zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: GridView filter больше меньше <>=

Сообщение zelenin » 2014.11.24, 23:48

ничего не понятно. в чем проблема?

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

$query
            ->andFilterWhere(['>=', 'status', $this->status]);
вот у меня код и он рабочий

Shappy
Сообщения: 86
Зарегистрирован: 2013.09.19, 12:31

Re: GridView filter больше меньше <>=

Сообщение Shappy » 2014.11.25, 00:09

zelenin писал(а):ничего не понятно. в чем проблема?

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

$query
            ->andFilterWhere(['>=', 'status', $this->status]); 
вот у меня код и он рабочий
Имеется ввиду в фильтре писать >1, <1 и т.п. в зависимости от того что написал ищется... Не жестко забивать >=, а чтобы это задавал сам пользователь... В yii1 было так...

zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: GridView filter больше меньше <>=

Сообщение zelenin » 2014.11.25, 00:15

Shappy писал(а):
zelenin писал(а):ничего не понятно. в чем проблема?

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

$query
            ->andFilterWhere(['>=', 'status', $this->status]);
вот у меня код и он рабочий
Имеется ввиду в фильтре писать >1, <1 и т.п. в зависимости от того что написал ищется... Не жестко забивать >=, а чтобы это задавал сам пользователь... В yii1 было так...
а, понятно.
Да из коробки нельзя, но ен вижу проблемы это реализовать.
В чем загвоздка?

Shappy
Сообщения: 86
Зарегистрирован: 2013.09.19, 12:31

Re: GridView filter больше меньше <>=

Сообщение Shappy » 2014.11.25, 00:25

Загвоздки в общем-то нет... Выше уже было описано как сделать, просто думал может можно как-то красиво это сделать... А так валидацию сводим к строке и метод выдергивает знаки перед числом например... Ну или можно валидацию не трогать, и в beforeValidate почистить от знаков...

Аватара пользователя
VaNnOrus
Сообщения: 96
Зарегистрирован: 2014.10.09, 12:50

Re: GridView filter больше меньше <>=

Сообщение VaNnOrus » 2014.11.25, 12:17

Заставлять юзверя что-то вручную писать - только проблемы себе делать. Почему не сделать радиокнопки/список выбора способа сортировки?

Shappy
Сообщения: 86
Зарегистрирован: 2013.09.19, 12:31

Re: GridView filter больше меньше <>=

Сообщение Shappy » 2014.11.25, 12:37

Не очень представляю как это сделать если честно... У меня например 7 полей где должна быть возможность фильтрации с условиями больше/меньше и т.д. легкий способ это писать прям в инпуте фильтра знак и значение, ну или без знака, если просто должно быть равно... Плюс фильтрация может быть не только по одному полю... Опишите пожалуйста поподробней как Вы представляете это?

Аватара пользователя
futbolim
Сообщения: 2050
Зарегистрирован: 2012.07.08, 19:28

Re: GridView filter больше меньше <>=

Сообщение futbolim » 2014.11.25, 13:08

VaNnOrus писал(а):Заставлять юзверя что-то вручную писать - только проблемы себе делать. Почему не сделать радиокнопки/список выбора способа сортировки?
А еще опишите, как Вы представляете себе dropDownList со списком id-шников, хотя бы в 100 тысяч.

zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: GridView filter больше меньше <>=

Сообщение zelenin » 2014.11.25, 13:35

futbolim писал(а):
VaNnOrus писал(а):Заставлять юзверя что-то вручную писать - только проблемы себе делать. Почему не сделать радиокнопки/список выбора способа сортировки?
А еще опишите, как Вы представляете себе dropDownList со списком id-шников, хотя бы в 100 тысяч.
имеется в виду дропдаун для операторов (>,< итд)

Аватара пользователя
VaNnOrus
Сообщения: 96
Зарегистрирован: 2014.10.09, 12:50

Re: GridView filter больше меньше <>=

Сообщение VaNnOrus » 2014.11.25, 15:06

Shappy писал(а):Не очень представляю как это сделать если честно... У меня например 7 полей где должна быть возможность фильтрации с условиями больше/меньше и т.д. легкий способ это писать прям в инпуте фильтра знак и значение, ну или без знака, если просто должно быть равно... Плюс фильтрация может быть не только по одному полю... Опишите пожалуйста поподробней как Вы представляете это?
Покажите мне хоть один сколько-нибудь крупный проект, который при фильтрации просит пользователя вводить знаки вручную. Да и даже если найдется такой - это не удобно с точки зрения пользователя.
У каждого поля фильтра кнопки/список (=,!=, <,>,etc). Выбираете способ подходящий и все.
futbolim писал(а):
VaNnOrus писал(а):Заставлять юзверя что-то вручную писать - только проблемы себе делать. Почему не сделать радиокнопки/список выбора способа сортировки?
А еще опишите, как Вы представляете себе dropDownList со списком id-шников, хотя бы в 100 тысяч.
@zelenin ответил, Вы меня не правильно поняли.

Аватара пользователя
Insolita
Сообщения: 788
Зарегистрирован: 2011.06.06, 01:39
Контактная информация:

Re: GridView filter больше меньше <>=

Сообщение Insolita » 2014.11.25, 16:15

т.е. типа так в каждом поле? http://joxi.ru/GrqzWg0I4lLQmz
попробовала, но штука в том что при изменении select фильтр сразу начинает запрос фильтрации... еще надо скрипт перешаманить, чтоб дергало только по изменении инпута.. и еще получается на каждое так фильтруемое поле надо в модели завести переменную типа 'compare_'.$attribute (Ну я на коленке так имена задала для фильтра) и соответственно в поисковой модели валидацию на всё
и

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

$query
            ->andFilterWhere([$this->compare_status, 'status', $this->status]); 

zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: GridView filter больше меньше <>=

Сообщение zelenin » 2014.11.25, 16:23

Insolita писал(а):т.е. типа так в каждом поле? http://joxi.ru/GrqzWg0I4lLQmz
попробовала, но штука в том что при изменении select фильтр сразу начинает запрос фильтрации... еще надо скрипт перешаманить, чтоб дергало только по изменении инпута.. и еще получается на каждое так фильтруемое поле надо в модели завести переменную типа 'compare_'.$attribute (Ну я на коленке так имена задала для фильтра) и соответственно в поисковой модели валидацию на всё
и

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

$query
            ->andFilterWhere([$this->compare_status, 'status', $this->status]);
да ясно, что ничего из коробки работать не будет.

Аватара пользователя
yiijeka
Сообщения: 3049
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: GridView filter больше меньше <>=

Сообщение yiijeka » 2014.11.25, 16:24

В крупных проектов уходят в сторону обычного "RangeSlider" - он более привычен,знаком и гибок, чем выпадающий список больше меньше.

zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: GridView filter больше меньше <>=

Сообщение zelenin » 2014.11.25, 16:27

yiijeka писал(а):В крупных проектов уходят в сторону обычного "RangeSlider" - он более привычен,знаком и гибок, чем выпадающий список больше меньше.
смотря какой диапазон будет и какая точность нужна.
Думаю слайдеры больше удобны на фронте вкупе с уточняющими инпутами, а в админке только инпуты.

Аватара пользователя
yiijeka
Сообщения: 3049
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: GridView filter больше меньше <>=

Сообщение yiijeka » 2014.11.25, 16:29

Всё верно.

Аватара пользователя
VaNnOrus
Сообщения: 96
Зарегистрирован: 2014.10.09, 12:50

Re: GridView filter больше меньше <>=

Сообщение VaNnOrus » 2014.11.25, 17:13

Insolita писал(а):т.е. типа так в каждом поле? http://joxi.ru/GrqzWg0I4lLQmz
Да. Как вариант.
yiijeka писал(а):В крупных проектов уходят в сторону обычного "RangeSlider" - он более привычен,знаком и гибок, чем выпадающий список больше меньше.
В зависимости от задачи да - еще удобнее может быть.
zelenin писал(а): Думаю слайдеры больше удобны на фронте вкупе с уточняющими инпутами, а в админке только инпуты.
Админам не нужны удобства, только хардкор? :)

Ответить