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 ![]()
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.