0

すべてのフィールドが検索変数として宣言された事前検索ページがあります。私はセッションですべての変数を保持しています。

私が知りたいのは、送信をクリックするだけで、ビューページのフィールドがセッション変数に保存されます。したがって、グリッドのページ付けとセッション変数を使用した並べ替えでは、データが読み込まれます。

しかし、事前検索ページのリンクをクリックしてセッションをクリアしたいですか?どうやってするか?

Controller.php

public function actionAdvance_search()
    {
        $modelAdvSearchFinder = new AdvSearchFinder;
        print_r($_GET);
        if(isset($_POST) && isset($_POST['AdvSearchFinder']['submit']))
        {
            $this->clearAdvSearchSessionVar();

            Yii::app()->session['id'] = ( $_POST['AdvSearchFinder']['id'])? Yii::app()->session['id'] = $_POST['AdvSearchFinder']['id']:"";
            Yii::app()->session['name'] = ( $_POST['AdvSearchFinder']['name'])? Yii::app()->session['name'] = $_POST['AdvSearchFinder']['name']:"";
            Yii::app()->session['age'] = ( $_POST['AdvSearchFinder']['age'])?Yii::app()->session['age'] = $_POST['AdvSearchFinder']['age']:"";
            Yii::app()->session['class'] = ( $_POST['AdvSearchFinder']['class'])? Yii::app()->session['class'] = $_POST['AdvSearchFinder']['class']:"";
            Yii::app()->session['section'] = ( $_POST['AdvSearchFinder']['section'])? Yii::app()->session['section'] = $_POST['AdvSearchFinder']['section']:"";
            Yii::app()->session['Email'] = ( $_POST['AdvSearchFinder']['Email'])? Yii::app()->session['Email'] = $_POST['AdvSearchFinder']['Email']:"";
            $modelAdvSearchFinder->attributes = $_POST['AdvSearchFinder'];

        }
        $id = Yii::app()->session['id'];
        $name = Yii::app()->session['name'];       
        $age = Yii::app()->session['age'];
        $class = Yii::app()->session['class'];  
        $section = Yii::app()->session['section'];  
        $Email = Yii::app()->session['Email'];    

        $criteria=new CDbCriteria(array('distinct'=>true,));          
        $criteria->compare('id',$id,true);
        $criteria->compare('name',$name,true);
        $criteria->compare('age',$age,true);
        $criteria->compare('class',$class,true);
        $criteria->compare('sectionPerson',$section,true);  
        $criteria->compare('Email',$Email,true);

        if($id != "" || $name != "" || $age  != "" || $class   != "" || $section    != "" || $Email      != "" || $TelePhone1  != "" || $TelePhone2  != "" || $Fax  != "" || $Address     != "" || $State       != "" || $Suburb      != "" || $PostCode   != "" || $Include_inactive != "F")
        {   
            $modelSearch= new CActiveDataProvider("tblClass", array(
                'criteria'=>$criteria,
            )); 
        }
        else
        {
            $modelSearch = "";
            $this->clearAdvSearchSessionVar();
        }
       $this->render('advance_search',array('modelSearch' => $modelSearch,'modelAdvSearchFinder'=>$modelAdvSearchFinder));
    }

model.php

class AdvSearchFinder extends CFormModel
{

    public $id;
    public $name;
    public $age;
    public $class;
    public $section;
    public $Email;

    public function rules()
    {
        return array(
            array('id,name,age,class,section,Email', 'safe'),
        );
    }    
    public function attributeLabels()
    {
        return array(
            'id'=>'ID',
            'name'=>'Name',
            'age'=>'AGE',
            'class'=>'Class',
            'section'=>'section',
            'Email'=>'Email'
        );
    }

}
4

5 に答える 5

2

グリッド フィルターを保持するのに役立つ 2 つの拡張機能があります。

記憶フィルター拡張機能は、CActiveRecord/Model 実装のデフォルトの可能性にいくつかの機能を追加します。

検索シナリオを検出し、GridView からフィルターを保存します。これは、ページ変更中のナビゲーション間でそれらを覚えておく必要がある場合に便利です. 多くのナビゲーションと重いフィルタリングの場合、この機能は数行でアクティブ化できます。

それのペアはクリアフィルターです

于 2012-07-10T19:25:24.987 に答える
2

Orlymee の回答に基づいて、コントローラーのチェックでこれをラップできます。

if(!Yii::app()->request->isAjaxRequest) { 
  unset(Yii::app()->session['var']);
}
于 2012-07-10T18:40:47.893 に答える
2
unset(Yii::app()->session['var']);
于 2012-07-10T16:09:42.760 に答える
0

他のユーザーが言ったように、このセッションをクリアする onclick イベントを jquery で作成できます。

unset(Yii::app()->session['var']);
于 2012-11-27T08:47:34.143 に答える
0

YII CActiveDataProvider には、次のように並べ替えとページ付けに使用できる要求パラメーターを設定するオプションが既にあるため、要求変数を保存するためにセッションを使用している理由がわかりません。

$params=array('id'=>$_POST['AdvSearchFinder']['id'],'name'=>$_POST['AdvSearchFinder']['name'])
$dataProvider=new CActiveDataProvider($CmdbMaster,array(
                'criteria'=>$criteria,
                'pagination'=>array(
                        'params'=>$params,
                ),
                'sort'=>array(
                        'params'=>$params,
                ),

        ));
于 2012-12-17T16:52:18.200 に答える