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では、ジョブを実行する CGridView にfilterSelector属性が追加されました

于 2013-01-25T09:18:59.677 に答える
0

これが私の4.5セントです....

これが機能する唯一の方法は、非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 に答える