Есть ли решение для сохранения фильтров (в сеансе), чтобы пользователь мог видеть "последние использованные фильтры", когда он возвращается?
Укажите ссылку в руководстве или документах или код. Я ничего не нашел в этом вопросе.
Это немного взломать, но это сохраняет фильтр, страницу и сортировку для меня.
Поместите это в свой контроллер, если ваша модель называется 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);
В модели 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"];
}
Привет, Приветствую вас за ваше решение. Он хорошо работает с фильтром значений, но не фильтром сортировки. Как мы можем это исправить?
В модели 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"];
}
Я не могу комментировать код Герберта Машке, я его реализовал и работал хорошо, но потом я подумал, что если я выберу вариант моего 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'];