Creare lista da Gridview con bottone Ajax

Salve a tutti!!

Non riesco a creare la funzione come da titolo…ovvero: arrivato nella pagina (Grid View) l’utente ha un bottone con cui può decidere se aggiungere tale contatto ad una lista.

Se il contatto viene aggiunto a tale lista non deve più apparire nel Grid View,che si aggiorna automaticamente.

Sono un pò capra e non riesco bene a capire come fare…vi posto quello che ho (non ho nessun errore, semplicemente i contatti non vengono eliminati dal Grid View)

Controller:





	public function actionAdd($id)

	{

		if(Yii::app()->request->isPostRequest)

		{

			// we only allow deletion via POST request

			$temp = Contatti::model()->findByPk($id);

			array_push($this->contatti_lista,$temp);

		    

			// if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser

			if(!isset($_GET['ajax']))

				$this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('index'));

		}

		else

			throw new CHttpException(400,'Invalid request. Please do not repeat this request again.');

	}


	public function actionAdmin()

	{

		$model=new Contatti('search');

		$model->unsetAttributes();  // clear any default values

		if(isset($_GET['Contatti']))

			$model->attributes=$_GET['Contatti'];

		


		$this->render('admin',array(

			'model'=>$model,

		));

	}


	public function actionIndex()

	{

		

		$modello = new Contatti('search');


		$criteria=new CDbCriteria;

		

		$criteria->compare('cognome',$modello->cognome,true);

		$criteria->compare('societa_value.Nome',$modello->societa_value,true);

		$criteria->compare('nome',$modello->nome,true);

		$criteria->compare('mail',$modello->mail,true);

		$criteria->compare('posizione',$modello->posizione);

		$criteria->compare('tel_uff',$modello->tel_uff,true);

		$criteria->compare('tel_pers',$modello->tel_pers,true);

		$criteria->compare('tel_cell',$modello->tel_cell,true);

		$criteria->compare('fax',$modello->fax,true);

		$criteria->compare('indirizzo',$modello->indirizzo,true);

		$criteria->compare('citta',$modello->citta);

		$criteria->compare('provincia',$modello->provincia);

		$criteria->compare('CAP',$modello->CAP);

		$criteria->compare('paese',$modello->paese,true);

		$criteria->compare('pagina_web',$modello->pagina_web,true);


		$criteria->with=array('societa_value');

                /*contatti_lista è una variabile globale inizializzata..ma per eccesso di sicurezza... <img src='http://www.yiiframework.com/forum/public/style_emoticons/default/smile.gif' class='bbc_emoticon' alt=':)' /> */

		if(isset($contatti_lista)){

                

                /* questa cosa non sono sicuro funzioni..ma non credo sia l'unico problema */

		foreach($contatti_lista as $conttatto){

		      $criteria->compare('id',$conttatto,true,'<>:');

		      }

		    }else {$criteria->compare('id',$modello->id,true,'<>:');}

		return new CActiveDataProvider($modello, array(

			'criteria'=>$criteria,

		));

		}



La grid view




<?php 

  $this->widget('zii.widgets.grid.CGridView', array( 

    'id' => 'paesi-grid', 

    'dataProvider' => $this->actionIndex(), 

    'filter' => $model, 

    'columns' => array( 

'id',

      'nome', 

      'cognome', 

      array( 

        'name' => 'azienda', 

        'filter' => CHtml::activeTextField($model, 'societa_value'), 

        'value' => '$data->societa_value->Nome', 

      ), 

array(

                        'class'=>'CButtonColumn',

                 'template'=>'{del}',

                 'buttons'=>array(

                          'del'=>array(

                                   'label'=>'Aggiungi',

                                   'url' =>'Yii::app()->controller->createUrl("generatore/add",array("id"=>$data->id,))',

                                

                                        'click'=>"function() {

                                if(!confirm('Aggiungo alla lista?')) return false;

                                $.fn.yiiGridView.update('paesi-grid', {

                                        type:'POST',

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

                                        success:function(text,status) {

					    $.fn.yiiGridView.update('paesi-grid');

					}

                                });

                                return false;

                        }",

                                         ),

                        ),

                ),

                

        ),      

)); 

?>



Sono abbastanza sicuro delle interazioni Ajax…mi pare proprio sia un problema di logica :P

Mi potreste indicare una strada?

Non sò bene come dire CActiveDataProvider di escludere gli id che ho memorizzato…ma non credo sia l’unico problema.

Hai provato ad aggiornare la griglia una volta che aggiungi il record alla lista di cui parli?

La griglia non dovrebbe aggiornarsi con:




success:function(text,status) {

$.fn.yiiGridView.update('paesi-grid');

}



?

…a meno che…Qual’è il ciclo di vita dell’oggetto controller?

Perchè se finita la action_qualcosa() viene distrutto…la variabile d’ambiente contatti_lista sarà sempre vuota…

Potrei scrivere in sessione tali dati…ma come?

Non ho ben capito come gestire la sessione in Yii e l’approccio normale $_SESSION[] non funziona…

Esempio:




$session=new CHttpSession;

$session->open();

$session['city_ID']=$_GET['city_ID'];



Grazie per la risposta, ma purtroppo non è così semplice…non ho ben capito…comunque pare che sia diffuso il problema di gestire array di array in sessione…vabbè, comunque ho risolto poi così ;)