lexen77
(Antonio Flaminio)
October 26, 2015, 8:00pm
1
Salve,
nella form anagrafica ho diverse textInput (nome, cognome, ecc…) e una dropDownList chiamata id_ruolo
In questa dropDownList carico i dati di una tabella esterna chaimata appunto Ruolo.
E possibile tramite un pulsante di fianco alla dropDownList aprire una finestra modale per inserire o modificare nuovi ruoli.
Inoltra alla chiusura della modale è possibile fare un refresh della dropDownList per visualizzare i dati aggiornati.
Grazie
Ciao Antonio,
se ho ben capito stai usando il modal di bootstrap e ti interessa ricevere l’evento di chiusura del popup.
Se è così il problema è Javascript e non PHP, ovvero:
http://getbootstrap.com/javascript/#modals-events
Nella view:
$this->registerJS( <<< EOT_JS
$('#myModal').on('hidden.bs.modal', function (e) {
// do something...
})
EOT_JS
);
lexen77
(Antonio Flaminio)
October 28, 2015, 10:36pm
3
Ciao Fabrizio,
per la gestione ella modale sto usando bootstrap modal.
La cosa che non riesco a fare è che quando clicco il pulsante salva situato nella form modale, dopo aver salvato i record con Ajax vorrei che si chiudesse la modale e si aggiornasse la dropdown senza il ricarico di tutta la view.
Spero di essermi spiegato.
Ciao
Ciao Antonio,
alla pressione del tasto nella modal puoi fare una chiamata ajax ($.post) per inviare i dati del form e nell’evento di ritorno della chiamata ajax eseguire la chiamata di chiusura della modal, una cosa del tipo:
$('#btnSubmitModal').on('click', function() {
var url = '....';
var formData = $('form').serialize();
$.post(
url,
formData,
function(data) {
$('#myModal').hide();
}
);
});
lexen77
(Antonio Flaminio)
November 4, 2015, 9:49am
5
Ciao Fabrizio,
riesci a dirmi perchè questa chiamata Ajax va in errore ?
Grazie.
<?php
$js = <<<JS
$('._addNew').on('click', function(e)
{
e.preventDefault();
var form = $(this);
$.ajax({
type: "POST",
url: '".Url::toRoute("piano/update")."',
data: form.serialize(),
dataType:"json",
success: function (result)
{
alert("OK");
$('#modal').modal('hide');
},
error: function ()
{
alert("error");
}
});
}
);
JS;
$this->registerJs($js);
?>
public function actionUpdate($id)
{
$model = $this->findModel($id);
if ($model->load(Yii::$app->request->post()) && $model->save())
{
$model->refresh();
Yii::$app->response->format = 'json';
return ['message' => Yii::t('app','Ok record modificato con successo!'), 'id'=>$model->id_piano];
}
return $this->renderAjax('update',['model'=>$model]);
}
Il blocco JS è un heredoc e quindi la scrittura dell’url
url: '".Url::toRoute("piano/update")."',
è errata.
Puoi popolare la variabile $urlAjax prima del blocco heredoc "JS"
e poi richiamarla:
$urlAjax = \yii\helpers\Url::toRoute("piano/update");
$js = <<<JS
...
url: '{$urlAjax}',
Verifica il sorgente html che contenga l’url corretto e poi con firebug se c’è qualche errore javascript o nella chiamata ajax.
lexen77
(Antonio Flaminio)
November 4, 2015, 1:01pm
7
Ho controllato con con firebug ho quest’errore :
"Il seguente parametro è mancante: id"
Sostituiendo il metodo POST con GET funziona ma
me interessa il Post per fare l’update di tutti i campi in automatico.
Se il metodo actionXXXXX ha un parametro, quel parametro dev’essere passato in GET.
Per evitare l’errore, devi togliere il parametro dal metodo ed recuperarlo tramite
Yii::$app->request->post(‘nome_parametro’);
lcnlcn
(Lcnlcn)
November 4, 2015, 5:52pm
9
Ciao a tutti vorrei porre una domanda in questo caso non ci sono in yii2
widgets che ti permettono di fare una cosa simile ?
lexen77
(Antonio Flaminio)
November 4, 2015, 7:05pm
10
Se il metodo actionXXXXX ha un parametro, quel parametro dev’essere passato in GET.
Per evitare l’errore, devi togliere il parametro dal metodo ed recuperarlo tramite
Yii::$app->request->post(‘nome_parametro’);
Per qualche strano motivo nonho nulla in POST
hai provato con un
var_dump($_POST);
subito all’interno del metodo actionXXXX ?
Così vedi cosa ti arriva. Fai il controllo con quello che viene inviato dalla pagina web attraverso firebug, così vedi se è il server a non ricevere dalla pagina html oppure c’è qualche errore di interpretazione nella pagina php.