Страница 1 из 2

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

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

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

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

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

$query->andFilterWhere([$your_token, 'your_field', $this->your_field]);
 

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

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

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

Добавлено: 2014.11.24, 22:45
Shappy
Странно что убрали... Было ведь очень удобно, сразу из коробки... Буду делать как Вы сказали...

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

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

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

Добавлено: 2014.11.24, 23:48
zelenin
ничего не понятно. в чем проблема?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Добавлено: 2014.11.25, 16:29
yiijeka
Всё верно.

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

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