Yii CgridView:排序或过滤删除我的“自定义”过滤器

时间:2012-10-01 21:46:42

标签: yii

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

问题: 当我直接在cgridview中排序或过滤(使用默认过滤器字段和排序标题)时,他不再使用我的隐藏字段值。我可能有点迷茫(我对YII很新)。如何给出默认过滤器和排序请求我的隐藏字段的值,以便它们将用于搜索功能?我可以看到我需要在请求中添加类似例如Person [name]的参数,但我不知道如何...

2 个答案:

答案 0 :(得分:1)

您可以通过更改inputSelector

中的jquery.yiigridview.js变量来解决此问题

例如,通过像以下内容进行更改,您可以将输入字段定义为gridview内部字段,方法是将filterClass(默认值为过滤器)添加到输入字段

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

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

答案 1 :(得分:0)

这是我的4.5美分......

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

显然以下内容对您没有帮助,但可能会更多地解释我在类似情况下所做的事情。我希望默认情况下限制某些类型用户的大表视图,但限制并不像仅显示单个用户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);
}