GridView filter больше меньше <>=
GridView filter больше меньше <>=
Добрый день, не могу понять как сделать в GridView фильтры с условиями, чтобы можно было искать допустим >1, <1, <>1 и т.д. Сначала проблема с валидацией, т.к. не пустит >1 если в валидации это integer, а затем проблема с самим запросом... Как это сделать правильно?
Re: GridView filter больше меньше <>=
Не знаю, убрали ли эту фичу, но как бы сделал я:
1. Сначала посмотрел сорцы, вдруг её не убрали.
2. Если её убрали, делать так:
а) валидатор меняем integer -> string
б) в Search модели добавляем метод, который бы чистил все значения инпутов от всяких бяк и оставлял бы символы <, >, =, digits (само собой этим методом обрабатывать только числовые поля)
в) ну и собсна andFilterWhere:
1. Сначала посмотрел сорцы, вдруг её не убрали.
2. Если её убрали, делать так:
а) валидатор меняем integer -> string
б) в Search модели добавляем метод, который бы чистил все значения инпутов от всяких бяк и оставлял бы символы <, >, =, digits (само собой этим методом обрабатывать только числовые поля)
в) ну и собсна andFilterWhere:
Код: Выделить всё
$query->andFilterWhere([$your_token, 'your_field', $this->your_field]);
Последний раз редактировалось futbolim 2014.11.24, 22:36, всего редактировалось 1 раз.
Re: GridView filter больше меньше <>=
Ну да, эту фичу убрали. У нас же появились Search модели...
Re: GridView filter больше меньше <>=
Странно что убрали... Было ведь очень удобно, сразу из коробки... Буду делать как Вы сказали...
Re: GridView filter больше меньше <>=
Не спешите, вдруг кто-нибудь что-нибудь лучшее посоветуетShappy писал(а):Странно что убрали... Было ведь очень удобно, сразу из коробки... Буду делать как Вы сказали...
Re: GridView filter больше меньше <>=
ничего не понятно. в чем проблема?
вот у меня код и он рабочий
Код: Выделить всё
$query
->andFilterWhere(['>=', 'status', $this->status]);
Re: GridView filter больше меньше <>=
Имеется ввиду в фильтре писать >1, <1 и т.п. в зависимости от того что написал ищется... Не жестко забивать >=, а чтобы это задавал сам пользователь... В yii1 было так...zelenin писал(а):ничего не понятно. в чем проблема?
вот у меня код и он рабочийКод: Выделить всё
$query ->andFilterWhere(['>=', 'status', $this->status]);
Re: GridView filter больше меньше <>=
а, понятно.Shappy писал(а):Имеется ввиду в фильтре писать >1, <1 и т.п. в зависимости от того что написал ищется... Не жестко забивать >=, а чтобы это задавал сам пользователь... В yii1 было так...zelenin писал(а):ничего не понятно. в чем проблема?
вот у меня код и он рабочийКод: Выделить всё
$query ->andFilterWhere(['>=', 'status', $this->status]);
Да из коробки нельзя, но ен вижу проблемы это реализовать.
В чем загвоздка?
Re: GridView filter больше меньше <>=
Загвоздки в общем-то нет... Выше уже было описано как сделать, просто думал может можно как-то красиво это сделать... А так валидацию сводим к строке и метод выдергивает знаки перед числом например... Ну или можно валидацию не трогать, и в beforeValidate почистить от знаков...
Re: GridView filter больше меньше <>=
Заставлять юзверя что-то вручную писать - только проблемы себе делать. Почему не сделать радиокнопки/список выбора способа сортировки?
Re: GridView filter больше меньше <>=
Не очень представляю как это сделать если честно... У меня например 7 полей где должна быть возможность фильтрации с условиями больше/меньше и т.д. легкий способ это писать прям в инпуте фильтра знак и значение, ну или без знака, если просто должно быть равно... Плюс фильтрация может быть не только по одному полю... Опишите пожалуйста поподробней как Вы представляете это?
Re: GridView filter больше меньше <>=
А еще опишите, как Вы представляете себе dropDownList со списком id-шников, хотя бы в 100 тысяч.VaNnOrus писал(а):Заставлять юзверя что-то вручную писать - только проблемы себе делать. Почему не сделать радиокнопки/список выбора способа сортировки?
Re: GridView filter больше меньше <>=
имеется в виду дропдаун для операторов (>,< итд)futbolim писал(а):А еще опишите, как Вы представляете себе dropDownList со списком id-шников, хотя бы в 100 тысяч.VaNnOrus писал(а):Заставлять юзверя что-то вручную писать - только проблемы себе делать. Почему не сделать радиокнопки/список выбора способа сортировки?
Re: GridView filter больше меньше <>=
Покажите мне хоть один сколько-нибудь крупный проект, который при фильтрации просит пользователя вводить знаки вручную. Да и даже если найдется такой - это не удобно с точки зрения пользователя.Shappy писал(а):Не очень представляю как это сделать если честно... У меня например 7 полей где должна быть возможность фильтрации с условиями больше/меньше и т.д. легкий способ это писать прям в инпуте фильтра знак и значение, ну или без знака, если просто должно быть равно... Плюс фильтрация может быть не только по одному полю... Опишите пожалуйста поподробней как Вы представляете это?
У каждого поля фильтра кнопки/список (=,!=, <,>,etc). Выбираете способ подходящий и все.
@zelenin ответил, Вы меня не правильно поняли.futbolim писал(а):А еще опишите, как Вы представляете себе dropDownList со списком id-шников, хотя бы в 100 тысяч.VaNnOrus писал(а):Заставлять юзверя что-то вручную писать - только проблемы себе делать. Почему не сделать радиокнопки/список выбора способа сортировки?
Re: GridView filter больше меньше <>=
т.е. типа так в каждом поле? http://joxi.ru/GrqzWg0I4lLQmz
попробовала, но штука в том что при изменении select фильтр сразу начинает запрос фильтрации... еще надо скрипт перешаманить, чтоб дергало только по изменении инпута.. и еще получается на каждое так фильтруемое поле надо в модели завести переменную типа 'compare_'.$attribute (Ну я на коленке так имена задала для фильтра) и соответственно в поисковой модели валидацию на всё
и
попробовала, но штука в том что при изменении select фильтр сразу начинает запрос фильтрации... еще надо скрипт перешаманить, чтоб дергало только по изменении инпута.. и еще получается на каждое так фильтруемое поле надо в модели завести переменную типа 'compare_'.$attribute (Ну я на коленке так имена задала для фильтра) и соответственно в поисковой модели валидацию на всё
и
Код: Выделить всё
$query
->andFilterWhere([$this->compare_status, 'status', $this->status]);
Re: GridView filter больше меньше <>=
да ясно, что ничего из коробки работать не будет.Insolita писал(а):т.е. типа так в каждом поле? http://joxi.ru/GrqzWg0I4lLQmz
попробовала, но штука в том что при изменении select фильтр сразу начинает запрос фильтрации... еще надо скрипт перешаманить, чтоб дергало только по изменении инпута.. и еще получается на каждое так фильтруемое поле надо в модели завести переменную типа 'compare_'.$attribute (Ну я на коленке так имена задала для фильтра) и соответственно в поисковой модели валидацию на всё
иКод: Выделить всё
$query ->andFilterWhere([$this->compare_status, 'status', $this->status]);
Re: GridView filter больше меньше <>=
В крупных проектов уходят в сторону обычного "RangeSlider" - он более привычен,знаком и гибок, чем выпадающий список больше меньше.
Re: GridView filter больше меньше <>=
смотря какой диапазон будет и какая точность нужна.yiijeka писал(а):В крупных проектов уходят в сторону обычного "RangeSlider" - он более привычен,знаком и гибок, чем выпадающий список больше меньше.
Думаю слайдеры больше удобны на фронте вкупе с уточняющими инпутами, а в админке только инпуты.
Re: GridView filter больше меньше <>=
Всё верно.
Re: GridView filter больше меньше <>=
Да. Как вариант.Insolita писал(а):т.е. типа так в каждом поле? http://joxi.ru/GrqzWg0I4lLQmz
В зависимости от задачи да - еще удобнее может быть.yiijeka писал(а):В крупных проектов уходят в сторону обычного "RangeSlider" - он более привычен,знаком и гибок, чем выпадающий список больше меньше.
Админам не нужны удобства, только хардкор?zelenin писал(а): Думаю слайдеры больше удобны на фронте вкупе с уточняющими инпутами, а в админке только инпуты.