0

情况: 我创建了一种底部带有 CGridView 的向导。每次用户在向导中选择某些东西时,网格都会被模型的搜索功能“过滤”(没有 AJAX)。我将所有用户对先前步骤的“答案”保留在隐藏字段中,因此我可以在向导中的每个步骤中再次使用它们进行过滤。

问题: 当我直接在 cgridview 中排序或过滤时(使用默认过滤字段和排序标题),他不再使用我的隐藏字段值。我可能有点迷路(顺便说一句,我对 YII 很陌生)。如何为默认过滤器和排序请求提供隐藏字段的值,以便在搜索功能中使用它们?我可以看到我需要在请求中添加诸如 Person[name] 之类的参数,但我不知道如何...

4

2 回答 2

1

您可以通过更改inputSelector变量来解决这个问题jquery.yiigridview.js

例如,通过像下面这样更改它,您可以通过将(女巫默认值是过滤器)添加到输入字段来将输入字段定义为gridview内部字段filterClass

inputSelector = '.' + settings.filterClass + ' input, ' + '.' + settings.filterClass + ' select';

编辑:在 Yii 1.1.13 中,filterSelector属性已添加到完成这项工作的 CGridView

于 2013-01-25T09:18:59.677 回答
0

这是我的 4 美分半....

我看到这个工作的唯一方法是你通过模型->搜索可以访问的非 AJAX 提交过程存储你的“向导”值(我在想 $_SESSION 但不知道这是否可行) () 函数,在过滤/搜索的所有实例中调用,并将它们添加到搜索条件中。

显然,以下内容对您没有帮助,但可能会更多地解释我在类似情况下所做的事情。默认情况下,我想限制某些类型用户的大表视图,但限制并不像只显示单个用户 ID 的条目那么简单。一旦用户过滤数据,他们就可以访问那里的所有基础数​​据。

我最终做的是检测他们是否过滤了我用来限制数据的任何列,如果是,则应用用户提交的过滤器,或者如果没有,则在同一列上应用我自己的限制过滤器。因此,对于我想要应用它的每一列,我会在 model->search() 函数中执行类似的操作,同时检测此默认限制是否应该适用于相关用户:

if(isset($this->A_DB_Column_Name) && in_array($this->A_DB_Column_Name,array(default limitation))) {
    $criteria->compare('A_DB_Column_Name',$this->A_DB_Column_Name,false);
} else {
    $criteria->compare('A_DB_Column_Name',array(default limitation),false);
}
于 2012-11-15T18:13:34.843 回答