Yii2,GridView,在会话中保存过滤器值
Yii2, GridView, save filters value in session
是否有任何解决方案可以保存过滤器(在会话中)以便用户回来时可以看到 "last used filters"?
请link在手册或文档中,或您的代码中。我没有搜索到这个问题。
在模型搜索 class 中,在搜索函数的开头添加此代码:
if (!isset($params["MyModelSearch"])) {
if (isset(Yii::$app->session["mymodelsearch"])){
$params["MyModelSearch"]=Yii::$app->session["mymodelsearch"];
}
}
else{
Yii::$app->session["mymodelsearch"]=$params["MyModelSearch"];
}
In the model Search class, at the beginning of search function add this code:
if (!isset($params["MyModelSearch"])) {
if (isset(Yii::$app->session["mymodelsearch"])){
$params["MyModelSearch"]=Yii::$app->session["mymodelsearch"];
}
}
else{
Yii::$app->session["mymodelsearch"]=$params["MyModelSearch"];
}
你好,
感谢您的解决方案。它适用于值过滤器,但不适用于排序过滤器。我们该如何解决这个问题?
这有点破解,但这为我节省了过滤器、页面和排序。
将它放在您的控制器中,假设您的模型名为 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);
我无法评论 Herbert Maschke 的代码,我实现了它并且运行良好,但后来我发现如果我 select 我的 gridview 的一个选项,如编辑然后返回,过滤器保持它们的值和分页也是如此,但在下一次单击另一个页码时,过滤器会丢失。我做了一个对我有用的改进。
$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'];
我进行更改以更正页面更改
$searchModel = new MyModelSearch();
$params = Yii::$app->request->queryParams;
if(count($params) <= 1){
//si es menor o igual a uno osea no ha realizado busqueda alguna
if(isset(Yii::$app->session['MyModelSearch'])) {
$params = Yii::$app->session['MyModelSearch'];
}else{
Yii::$app->session['MyModelSearch'] = $params;
}
}else{
if(isset(Yii::$app->request->queryParams['MyModelSearch'])){
Yii::$app->session['MyModelSearch'] = $params;
}else{
$params = Yii::$app->session['MyModelSearch'];
}
}
$dataProvider = $searchModel->search($params);
是否有任何解决方案可以保存过滤器(在会话中)以便用户回来时可以看到 "last used filters"?
请link在手册或文档中,或您的代码中。我没有搜索到这个问题。
在模型搜索 class 中,在搜索函数的开头添加此代码:
if (!isset($params["MyModelSearch"])) {
if (isset(Yii::$app->session["mymodelsearch"])){
$params["MyModelSearch"]=Yii::$app->session["mymodelsearch"];
}
}
else{
Yii::$app->session["mymodelsearch"]=$params["MyModelSearch"];
}
In the model Search class, at the beginning of search function add this code:
if (!isset($params["MyModelSearch"])) {
if (isset(Yii::$app->session["mymodelsearch"])){
$params["MyModelSearch"]=Yii::$app->session["mymodelsearch"];
}
}
else{
Yii::$app->session["mymodelsearch"]=$params["MyModelSearch"];
}
你好, 感谢您的解决方案。它适用于值过滤器,但不适用于排序过滤器。我们该如何解决这个问题?
这有点破解,但这为我节省了过滤器、页面和排序。
将它放在您的控制器中,假设您的模型名为 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);
我无法评论 Herbert Maschke 的代码,我实现了它并且运行良好,但后来我发现如果我 select 我的 gridview 的一个选项,如编辑然后返回,过滤器保持它们的值和分页也是如此,但在下一次单击另一个页码时,过滤器会丢失。我做了一个对我有用的改进。
$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'];
我进行更改以更正页面更改
$searchModel = new MyModelSearch();
$params = Yii::$app->request->queryParams;
if(count($params) <= 1){
//si es menor o igual a uno osea no ha realizado busqueda alguna
if(isset(Yii::$app->session['MyModelSearch'])) {
$params = Yii::$app->session['MyModelSearch'];
}else{
Yii::$app->session['MyModelSearch'] = $params;
}
}else{
if(isset(Yii::$app->request->queryParams['MyModelSearch'])){
Yii::$app->session['MyModelSearch'] = $params;
}else{
$params = Yii::$app->session['MyModelSearch'];
}
}
$dataProvider = $searchModel->search($params);