【发布时间】:2019-08-15 22:15:51
【问题描述】:
是否有任何解决方案可以保存过滤器(在会话中),以便用户在回来时可以看到“上次使用的过滤器”?
请在手册或文档或您的代码中链接。我没有发现任何搜索这个问题。
【问题讨论】:
是否有任何解决方案可以保存过滤器(在会话中),以便用户在回来时可以看到“上次使用的过滤器”?
请在手册或文档或您的代码中链接。我没有发现任何搜索这个问题。
【问题讨论】:
这有点像 hack,但这为我节省了过滤器、页面和排序。
把它放在你的控制器中,假设你的模型叫做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);
【讨论】:
在模型搜索类中,在搜索功能的开头添加如下代码:
if (!isset($params["MyModelSearch"])) {
if (isset(Yii::$app->session["mymodelsearch"])){
$params["MyModelSearch"]=Yii::$app->session["mymodelsearch"];
}
}
else{
Yii::$app->session["mymodelsearch"]=$params["MyModelSearch"];
}
【讨论】:
在模型搜索类中,在搜索功能的开头添加以下代码:
if (!isset($params["MyModelSearch"])) {
if (isset(Yii::$app->session["mymodelsearch"])){
$params["MyModelSearch"]=Yii::$app->session["mymodelsearch"];
}
}
else{
Yii::$app->session["mymodelsearch"]=$params["MyModelSearch"];
}
嗨, 感谢您的解决方案。它适用于值过滤器,但不适用于排序过滤器。我们该如何解决这个问题?
【讨论】:
我无法评论 Herbert Maschke 代码,我实现了它并且运行良好,但后来我发现,如果我选择我的 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);
【讨论】: