Как вынести поле фильтра из GridView?

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

Как вынести поле фильтра из GridView?

Сообщение Grazio »

Всем привет!

Подскажите, пожалуйста, есть ли способ сделать отдельное поле вне таблицы GridView, которое бы функционировало как фильтр по столбцу. Просто находилось в другой части страницы. :roll:
ZxcR_777
Сообщения: 21
Зарегистрирован: 2017.02.16, 16:17

Re: Как вынести поле фильтра из GridView?

Сообщение ZxcR_777 »

Просто сделайте отдельную форму в той части страницы , где вам надо и получая get запросом данные для фильтра в запрос добавьте andFilterWhere ()
Grazio
Сообщения: 124
Зарегистрирован: 2015.01.24, 15:31

Re: Как вынести поле фильтра из GridView?

Сообщение Grazio »

ZxcR_777 спасибо за ответ, но я не понимаю, как это сделать :|
urichalex
Сообщения: 994
Зарегистрирован: 2015.08.07, 11:03

Re: Как вынести поле фильтра из GridView?

Сообщение urichalex »

Grazio писал(а): 2017.10.24, 14:53 ZxcR_777 спасибо за ответ, но я не понимаю, как это сделать :|
Сгенерируйте стандартный CRUD с SearchModel при помощи GII и посмотрите, как это реализовано в представлении index.php
ZxcR_777
Сообщения: 21
Зарегистрирован: 2017.02.16, 16:17

Re: Как вынести поле фильтра из GridView?

Сообщение ZxcR_777 »

Добавьте форму с нужными вам полями фильтра, action - укажите тот где у вас выводится gridview, в контроллере получаете
iif(Yii::$app->request->get('filter')){
$fliter = Yii::$app->request->get('filter');
... здесь переменным передаёте значения формы ...
например $name => $fliter['name'];
}
Далее в ваш запрос выборки добавляете ->andFilterWhere(['like', 'LOWER(name)', $name])
Grazio
Сообщения: 124
Зарегистрирован: 2015.01.24, 15:31

Re: Как вынести поле фильтра из GridView?

Сообщение Grazio »

Так. Вроде я Ajax-ом словил в контроллере то, что введено в инпут. Не понятно, как вот это сделать :
ZxcR_777 писал(а): 2017.10.24, 15:23 Далее в ваш запрос выборки добавляете ->andFilterWhere(['like', 'LOWER(name)', $name])
как мне это пойманное значение из контроллера туда передать?
someweb
Сообщения: 552
Зарегистрирован: 2017.03.09, 10:12

Re: Как вынести поле фильтра из GridView?

Сообщение someweb »

Сделайте без Ajax сначала. Вам же написали:
urichalex писал(а): 2017.10.24, 15:13 Сгенерируйте стандартный CRUD с SearchModel при помощи GII и посмотрите, как это реализовано в представлении index.php
Расскоментируйте в index.php <?php //echo $this->render('_search' ...
Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа. Роберт Шекли.
Grazio
Сообщения: 124
Зарегистрирован: 2015.01.24, 15:31

Re: Как вынести поле фильтра из GridView?

Сообщение Grazio »

someweb писал(а): 2017.10.24, 16:35 Сделайте без Ajax сначала. Вам же написали:
urichalex писал(а): 2017.10.24, 15:13 Сгенерируйте стандартный CRUD с SearchModel при помощи GII и посмотрите, как это реализовано в представлении index.php
Расскоментируйте в index.php <?php //echo $this->render('_search' ...
да, я вижу это решение.. перезагрузка страницы происходит, это не кошерно.
Как бы перестроить gridview по сабмиту? Есть такая возможность?
Grazio
Сообщения: 124
Зарегистрирован: 2015.01.24, 15:31

Re: Как вынести поле фильтра из GridView?

Сообщение Grazio »

Допустим, что я сделал вот так.

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

    public function actionIndex()
    {

        $searchModel = new PhtestSearch();
        $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

        if (\Yii::$app->request->isAjax) {
            $data = Yii::$app->request->post();
            $filter = $data['filter']; 
            $qp = Yii::$app->request->queryParams;
            $qp['PhtestSearch']['filterfield'] = $filter;
            $dataProvider = $searchModel->search($qp);

            //дальше что?
        }

        return $this->render('index', [
            'searchModel' => $searchModel,
            'dataProvider' => $dataProvider,
            'model' => $searchModel,
        ]);

    }
Я вижу, что dataprovider правильно собирается. вопрос в том, как его применить к gridview чтоб он перерисовался?
urichalex
Сообщения: 994
Зарегистрирован: 2015.08.07, 11:03

Re: Как вынести поле фильтра из GridView?

Сообщение urichalex »

Зачем вы снова забиваете модель поиска? Это должна делать сама модель поиска.
Если перегружается страница то:
1. Неверно настроен пиджак
2. В ответе пиджаку приходит статус, отличный от 200.
Это все дебажится за 5 минут
Grazio
Сообщения: 124
Зарегистрирован: 2015.01.24, 15:31

Re: Как вынести поле фильтра из GridView?

Сообщение Grazio »

urichalex писал(а): 2017.10.24, 18:58 Зачем вы снова забиваете модель поиска? Это должна делать сама модель поиска.
Я это делаю потому, что не понимаю, как делать правильно.
Что должно инициировать изменение результатов модели поиска? Какая команда?
urichalex писал(а): 2017.10.24, 18:58 Если перегружается страница то:
Если мы просто прикручиваем форму, которая работает GET-запросом, то она и должна перезагружаться и работает она в этом смысле корректно - в адресной строке я вижу передаваемые параметры, таблица после загрузки отфильтрована, в поле фильтра стоит нужный параметр. Вопрос в том, как это сделать без перезагрузки страницы - ввести в некое поле слово, чтобы таблица отфильтровалась.
До того момента, верно ли настроен пиждак - я ещё не дошёл, потому что не понимаю, что должно быть сделано, чтобы получить такой же эффект как и по откравке формы, только без перезагрузки страницы. :roll:
urichalex
Сообщения: 994
Зарегистрирован: 2015.08.07, 11:03

Re: Как вынести поле фильтра из GridView?

Сообщение urichalex »

Grazio писал(а): 2017.10.24, 21:26
urichalex писал(а): 2017.10.24, 18:58 Зачем вы снова забиваете модель поиска? Это должна делать сама модель поиска.
Я это делаю потому, что не понимаю, как делать правильно.
Что должно инициировать изменение результатов модели поиска? Какая команда?
urichalex писал(а): 2017.10.24, 18:58 Если перегружается страница то:
Если мы просто прикручиваем форму, которая работает GET-запросом, то она и должна перезагружаться и работает она в этом смысле корректно - в адресной строке я вижу передаваемые параметры, таблица после загрузки отфильтрована, в поле фильтра стоит нужный параметр. Вопрос в том, как это сделать без перезагрузки страницы - ввести в некое поле слово, чтобы таблица отфильтровалась.
До того момента, верно ли настроен пиждак - я ещё не дошёл, потому что не понимаю, что должно быть сделано, чтобы получить такой же эффект как и по откравке формы, только без перезагрузки страницы. :roll:
Я сказал как. Генерируйте gii, там все видно и понятно.
Запросы формируются в searchModel
Grazio
Сообщения: 124
Зарегистрирован: 2015.01.24, 15:31

Re: Как вынести поле фильтра из GridView?

Сообщение Grazio »

urichalex ,
Я не понимаю, что вы от меня хотите. Я и так работаю в сгенерированном gii CRUD'e.
Вот, что по умолчанию идёт в контроллере в actionIndex:

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

    public function actionIndex()
    {
        $searchModel = new PhtestSearch();
        $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
        ...
В первой строчке тела экшена создаётся объект Search,
Во второй - создаётся dataProvider через его функцию search(), В которую передаются поисковые\фильтрационнные параметры. Никаких других методов в модели поиска для изменения полученного здесь методом search() датапровайдера - я больше не вижу.

Может быть вы напрямую скажете, что вы имеете ввиду?
Ответить