Salve a tutti,
seguendo delle guide trovate sul wiki di yii,
come punto di partenza ho usato questa guida qui:
http://www.yiiframework.com/wiki/145/cjuidialog-for-create-new-model/
Ho realizzato il mio bel bottone JuiButton che apre una JuiDialog e carica una view di una form di update.
La logica torna, e tutto torna… tranne che per una piccola cosa:
Al momento del submit, vorrei che i dati che ho appena aggiornato mi si aggiornassero anche sulla pagina sottostante.
Al momento ho fatto due prove:
- Visto che utilizzavo json mi son passato la pagina con json e poi riempivo un div… tutto funziona correttamente
ma i widget di quella parte della pagina che ricarico non funzionano… ad esempio l’ui button non apre più la finestra di dialog
-Provare a fare un redirect della pagina nel controller, ma la chiamata avviene via ajax quindi la pagina non refresha.
Ecco un pò di codice:
codice della finestra di dialog:
<? $this->beginWidget('zii.widgets.jui.CJuiDialog', array(
'id'=>'dialog_ref',
'themeUrl'=>''.Yii::app()->baseUrl.'/css',
'theme'=>'btn_custom',
'htmlOptions'=>array(
'style'=>'overflow-x:hidden',
),
//additional javascript options for the dialog plugin
'options'=>array(
'title'=>'Modifica Referente',
'autoOpen'=>false,
'modal'=>true,
'width'=>450,
'height'=>600,
'buttons'=>array(
'Modifica'=>'js:function(){
$.ajax({
type: "POST",
url: $("#dialog_ref form").attr("action"),
data: $("#dialog_ref form").serialize(),
dataType: "json",
success: function(data){
if (data.status == "failure")
{
$("#dialog_ref div.divForForm").html(data.div);
}
else
{
$("#dialog_ref div.divForForm").html(data.div);
$("#dialog_ref").dialog("close");
$("#box_referente").html(data.page);
}
}
});
}',
'Annulla'=>'js:function(){$(this).dialog("close");}',
),
),
));
?>
<div class="divForForm"></div>
<?php
$this->endWidget('zii.widgets.jui.CJuiDialog');
?>
Controller:
public function actionUpdatereferente($id)
{
$progetto=ProgettoPresentato::model()->findByPk($id);
$model=User::model()->notsafe()->findbyPk($progetto->referente->id);
$profile=$model->profile;
if(isset($_POST['User']))
{
$model->attributes=$_POST['User'];
$profile->attributes=$_POST['Profile'];
if($model->validate()&&$profile->validate()) {
$old_password = User::model()->notsafe()->findByPk($model->id);
if ($old_password->password!=$model->password) {
$model->password=Yii::app()->controller->module->encrypting($model->password);
$model->activkey=Yii::app()->controller->module->encrypting(microtime().$model->password);
}
$model->save();
$profile->save();
//Aggiorno ruolo di rights all'utente o admin.
if($model->superuser == 1){
$authenticatedName = Rights::module()->superuserName;
$authenticatedName_old = Rights::module()->authenticatedName;
Rights::revoke($authenticatedName_old, $model->id);
Rights::assign($authenticatedName, $model->id);
} else {
$authenticatedName = Rights::module()->authenticatedName;
$authenticatedName_old = Rights::module()->superuserName;
Rights::revoke($authenticatedName_old, $model->id);
Rights::assign($authenticatedName, $model->id);
}
if (Yii::app()->request->isAjaxRequest)
{
echo CJSON::encode(array(
'status'=>'success',
'div'=>"Referente Modificato con successo.",
'page'=>$this->renderPartial('viewpresentato_form/_form_referente', array('model'=>ProgettoPresentato::model()->findByPk($id)),true,true)
));
$this->redirect(array('viewpresentato','id'=>$progetto->id));
// exit;
}
else
$this->redirect(array('viewpresentato','id'=>$progetto->id));
} else $profile->validate();
}
if (Yii::app()->request->isAjaxRequest)
{
echo CJSON::encode(array(
'status'=>'failure',
'div'=>$this->renderPartial('update/_referente', array('model'=>$model,
'profile'=>$profile), true)));
exit;
}
else {
$this->render('viewpresentato',array('model'=>$progetto,));
}
}
che mi dite?