Yii2, GridView, сохранить значение фильтров в сеансе

0

Есть ли решение для сохранения фильтров (в сеансе), чтобы пользователь мог видеть "последние использованные фильтры", когда он возвращается?

Укажите ссылку в руководстве или документах или код. Я ничего не нашел в этом вопросе.

Теги:
session
yii2
gridview

4 ответа

3
Лучший ответ

Это немного взломать, но это сохраняет фильтр, страницу и сортировку для меня.

Поместите это в свой контроллер, если ваша модель называется Customer:

    $searchModel = new CustomerSearch();

    $params = Yii::$app->request->queryParams;

    if (count($params) <= 1) {
      $params = Yii::$app->session['customerparams'];
      if(isset(Yii::$app->session['customerparams']['page']))
        $_GET['page'] = Yii::$app->session['customerparams']['page'];
      } else {
        Yii::$app->session['customerparams'] = $params;
    }

    $dataProvider = $searchModel->search($params);
2

В модели Search class, в начале функции поиска, добавьте этот код:

if (!isset($params["MyModelSearch"])) {
 if (isset(Yii::$app->session["mymodelsearch"])){
  $params["MyModelSearch"]=Yii::$app->session["mymodelsearch"];
}
}
else{
   Yii::$app->session["mymodelsearch"]=$params["MyModelSearch"];
}

Привет, Приветствую вас за ваше решение. Он хорошо работает с фильтром значений, но не фильтром сортировки. Как мы можем это исправить?

2

В модели Search class, в начале функции поиска, добавьте этот код:

if (!isset($params["MyModelSearch"])) {
   if (isset(Yii::$app->session["mymodelsearch"])){
      $params["MyModelSearch"]=Yii::$app->session["mymodelsearch"];
   }
}
else{
   Yii::$app->session["mymodelsearch"]=$params["MyModelSearch"];
}
0

Я не могу комментировать код Герберта Машке, я его реализовал и работал хорошо, но потом я подумал, что если я выберу вариант моего gridview, например Edit, а затем вернусь, фильтры будут сохранять свои значения и разбиение на страницы, но в следующий клик на другой номер страницы, фильтры теряются. Я сделал улучшение, которое сработало для меня.

$searchModel = new CustomerSearch();

$params = Yii::$app->request->queryParams;

if (count($params) <= 1) {
  $params = Yii::$app->session['customerparams'];
  if(isset(Yii::$app->session['customerparams']['page'])) <<------
    $_GET['page'] = Yii::$app->session['customerparams']['page']; <<------
  } else {
    Yii::$app->session['customerparams'] = $params;
}

$dataProvider = $searchModel->search($params);

Кажется, что только параметр страницы был восстановлен до $_GET (что позже $_GET использовался для разбивки на страницы и потерял все фильтры), поэтому я изменил эти две строки:

if(isset(Yii::$app->session['customerparams'])) {
    $_GET = Yii::$app->session['customerparams'];

Ещё вопросы

Сообщество Overcoder
Наверх
Меню