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.