[Extension] Erememberfiltersbehavior

Hi all, I have a GridView and a Form to manage advanced filters on the grid. I’m trying to use ERememberFiltersBehavior extension to remember filters through page change and sort on columns. Can’t realize how to do that. Filters are working well but can’t be remembered when doing sort of changing page.





::::: This is my CFormModel for advanced filters management:


<?php


class CercaArticoliForm extends CFormModel

{

    public $minPrice;

    public $maxPrice;

    public $categoria;

    public $isFuoriListino;


    

    public function behaviors() {

           return array(

               'ERememberFiltersBehavior' => array(

                   'class' => 'yii-remember-filters-gridview.components.ERememberFiltersBehavior',

                   'defaults'=>array(),           /* optional line */

                   'defaultStickOnClear'=>false   /* optional line */

               ),

           );

    }    


    

    public function rules()

    {

        return array(

            array('minPrice,maxPrice,categoria,isFuoriListino', 'safe'),

        );

    }


	public function attributeLabels()

	{

		return array(

                    'isFuoriListino' => 'Fuori Listino',

		);

	}

    

    public function search()

    {

        $criteria = new CDbCriteria;


        if(!empty($this->minPrice))

            $criteria->addCondition('PrzList1 > '.(int)$this->minPrice);


        if(!empty($this->maxPrice))

            $criteria->addCondition('PrzList1 < '.(int)$this->maxPrice);


        if(!empty($this->categoria)) {

            $criteria->compare('CodiceCategoria', $this->categoria, true);

        }

        if(!empty($this->isFuoriListino)) {

            if((int)$this->isFuoriListino == 0) {

                $criteria->addCondition('FuoriListino = 0');

            } else {

                if((int)$this->isFuoriListino == 1) 

                    $criteria->addCondition('FuoriListino <> 0');

            }

        }


        

        

        return new CActiveDataProvider('Articoli', array(

            'criteria' => $criteria,

        ));

    }

}


?>




::::: this is my CActiveRecord "Articoli":


<?php


class Articoli extends CActiveRecord

{


    

	public function tableName()

	{

		return 'tarticoli';

	}




	public function rules()

	{

		return array(

			array('CodArt', 'length', 'max'=>50),

			array('Descr', 'length', 'max'=>200),

			array('PrzList1', 'length', 'max'=>10),

			array('DataAggPrezzo', 'length', 'max'=>100),

		);

	}


	public function relations()

	{

		return array();

	}


	public function attributeLabels()

	{

		return array(

			'ID' => 'ID',

			'CodArt' => 'Cod.Art.',

			'Descr' => 'Descrizione',

			'PrzList1' => 'Prz. Listino',

			'CodiceCategoria' => 'Categ',

			

		);

	}


	

	public static function model($className=__CLASS__)

	{

		return parent::model($className);

	}

}

?>





::::: this is my CGridview (griglia.php) with the form for the filters:




<div class="form">


<?php $form=$this->beginWidget('CActiveForm', array(

	'id'=>'search-form',

	'enableClientValidation'=>true,

	'clientOptions'=>array(

		'validateOnSubmit'=>true,

	),

)); ?>


	<div class="row">

		<?php echo $form->labelEx($dataProvider,'isFuoriListino'); ?>

		<?php echo $form->checkBox($dataProvider,'isFuoriListino'); ?>

	</div>


	<div class="row">

		<?php echo $form->labelEx($dataProvider,'minPrice'); ?>

		<?php echo $form->textField($dataProvider,'minPrice'); ?>

	</div>


	<div class="row">

		<?php echo $form->labelEx($dataProvider,'maxPrice'); ?>

		<?php echo $form->textField($dataProvider,'maxPrice'); ?>

	</div>


	<div class="row">

            <?php

                $models = Categorie::model()->findAll(

                                 array('order' => 'NomeCategoria'));


                $list = CHtml::listData($models, 

                                'CodCateg', 'CodCateg_NomeCategoria');   

                

                echo $form->dropDownList($dataProvider,'categoria', $list, array('prompt'=>'Select'));

            ?>

	</div>


    

	<div class="row buttons">

		<?php echo CHtml::submitButton('Submit'); ?>

	</div>


<?php $this->endWidget(); ?>


</div><!-- form -->


<?php 


    $this->widget('bootstrap.widgets.TbGridView', 

            array(

                    'id' => 'griglia_magazzino1',

                    'dataProvider'=>$dataProvider->search(),

                    'itemsCssClass' => 'table table-striped table-hover table-bordered',

                    'selectableRows'=>1,

                    'ajaxUpdate'=>true,

                    'htmlOptions'=>array('class'=>'grid-view grid-size'),

                    'selectionChanged'=>'function(id){ location.href = "' . $this->createUrl('view') . '/id/" + $.fn.yiiGridView.getSelection(id);}',                

                    'columns' => array(

                            'ID',

                            'CodArt',

                            'Descr',

                            'PrzList1',

                            'CodiceCategoria',

                            'DataAggPrezzo',

                            array(

                                'name'=>'PrzList1',

                                'header'=>'aaaa',

                                'value'=>'Yii::app()->numberFormatter->format("#,##0.00",$data->PrzList1)',

                            ),

                            array(

                                'class' => 'CButtonColumn',

                                'template' => '{update} {bottone2} {bottone3}',

                                'buttons' => array(

                                    'update' => array(

                                        'label'=>'Aggiorna',

                                        'imageUrl'=>Yii::app()->request->baseUrl . '/images/checkMsgOK.gif',

                                        'url'=>'Yii::app()->createUrl("site/addToCart", array("idRecord"=>$data->ID))',                                        

                                    ),

                                    'bottone2' => array(

                                        'label'=>'Bottone 2',

                                        'url' => '$data->ID',

                                        'click'=>'function(){alert("ID: " + $(this).attr(\'href\') + " !!"); return false;}',                                        

                                    ),

                                    'bottone3' => array(

                                        'label'=>'Bottone 3',

                                        'url' => 'Yii::app()->createUrl("site/azione1", array("IDRec"=>$data->ID))',

                                        'click'=>'function(){ if(!confirm("Are you sure?")) return false;

                                                                           var th = this;

                                                                           var afterUpdate = function(){};

                                                                               $.fn.yiiGridView.update("griglia_magazzino1", {

                                                                                       type:"POST",

                                                                                       url:$(this).attr("href"),

                                                                                       success:function(data) {

                                                                                               //alert(data);

                                                                                               $.fn.yiiGridView.update("griglia_magazzino1");

                                                                                               afterUpdate(th,true);

                                                                                       },

                                                                                       error:function(XHR) {

                                                                                            return afterUpdate(th,false,XHR);

                                                                                       }

                                                                               });

                                                                            return false;

                                                            }',

                                    ),

                               ),

                            ),

                        ),

                )

    ); 

?>





::::: and here is my action to render the gridview and the form on a page:


	public function actionTestgrid()

	{

                $dataProvider=new CercaArticoliForm();

                

                if(isset($_POST['CercaArticoliForm'])) {

                    $dataProvider->attributes = $_POST['CercaArticoliForm'];

                }


		$this->render('griglia', array('dataProvider' => $dataProvider));

	}




[u]Solved in this way:

Removed the extension ERememberFiltersBehavior and done this.

[/u]




// Added this class in components folder

class RememberFilters {

    

    public function remember($theModel, $theCriteria) {

       

        $key1 = $theModel . '_sort';

        $key2 = $theModel . '_page';

        $criteria = $theCriteria;

        

        if(empty($_GET[$key1]) && empty($_GET[$key2])) {

           Yii::app()->user->setState('criteria_'.$theModel, $theCriteria);

        } else {

           $criteria = Yii::app()->user->getState('criteria_'.$theModel);            

        }

        

        return $criteria;

    }

}





// in my CercaArticoliForm

    public function search()

    {

        $criteria = new CDbCriteria;


        

        if(!empty($this->minPrice))

            $criteria->addCondition('PrzList1 > '.(int)$this->minPrice);


        if(!empty($this->maxPrice))

            $criteria->addCondition('PrzList1 < '.(int)$this->maxPrice);


        if(!empty($this->categoria)) {

            $criteria->compare('CodiceCategoria', $this->categoria, true);

        }

        if(!empty($this->isFuoriListino)) {

            if((int)$this->isFuoriListino == 0) {

                $criteria->addCondition('FuoriListino = 0');

            } else {

                if((int)$this->isFuoriListino == 1) 

                    $criteria->addCondition('FuoriListino <> 0');

            }

        }

        


	// Added this two lines	

        $remfil = new RememberFilters();

        $criteria = $remfil->remember('Articoli', $criteria);

        

        $articoli = new CActiveDataProvider('Articoli');

        $articoli->setCriteria($criteria);

        

        return $articoli;

    }