Yii CgridView:排序或筛选将删除我的;海关;滤波器

Yii CgridView:排序或筛选将删除我的;海关;滤波器,yii,Yii,情况: 我创建了一种向导,底部有一个CGridView。每当用户在向导中选择某个内容时,网格将被模型及其搜索功能“过滤”(不使用AJAX)。我将所有用户对之前步骤的“答案”都保存在隐藏字段中,以便在向导的每个步骤中再次使用它们进行过滤 问题: 当我直接在cgridview中进行排序或筛选时(使用默认的筛选字段和排序标题),他不再使用我的隐藏字段值。我可能有点迷路了(顺便说一句,我对YII很陌生)。如何为默认筛选和排序请求提供hiddenfields的值,以便在搜索函数中使用?我可以看到我需要在请

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

问题:
当我直接在cgridview中进行排序或筛选时(使用默认的筛选字段和排序标题),他不再使用我的隐藏字段值。我可能有点迷路了(顺便说一句,我对YII很陌生)。如何为默认筛选和排序请求提供hiddenfields的值,以便在搜索函数中使用?我可以看到我需要在请求中添加参数,例如Person[name],但我不知道如何…

这是我的4.5美分

我认为这一工作的唯一方式是,通过非AJAX提交过程(我想是$\u会话,但不知道这是否有效)将“向导”值存储在某个地方,该位置可以由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);
}

您可以通过在
jquery.yiigridview.js

例如,通过如下更改,可以将输入字段定义为
gridview
内部字段,方法是将
filterClass
(默认值为filters)添加到输入字段中

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


编辑:在Yii 1.1.13中,属性已添加到执行作业的CGridView中

您添加的隐藏字段,它们是否也采用ModelName[AttributeName]的形式?Yii对其widget中的那些东西非常严格&使用它们。如果您指定一些更多的信息(代码等),您可能会给这里的人提供更多的信息。谢谢,我不想把这个问题具体化(这就是为什么我没有代码),因为我认为这是一个常见的问题。假设我在cgridview上面有自己的表单(不是小部件)。用户可以在我的自定义表单中填写一些字段。当用户筛选或排序CGridView(使用默认按钮和字段)时,排序或筛选操作也需要使用自定义表单的值。实际上,我想制作一些类似于高级搜索表单的东西,但这是一段很好的复杂代码,需要理解:)。希望这更有意义。。。