Buon Giorno a Tutti,
premesso che sono un novizio di YII, lo apprezzo molto per la semplicità e velocità di utilizzo, ho una buona conoscenza del php e novizio di jquery ma il web insegna.
Mi trovo con la seguente situazione:
YII 1.1.15, utilizzo l’estensione MultiModelForm v. 6.0 (per semplicità xchè non ho ancora capito come non utilizzarla e fare tutto con yii) per inglobare in un solo form più model.
Model Contratto, ContrattoDet, ContrattoAbbo, ContrattoImpianto, Abbo, AbboDet, Impianto, ImpiantoDet
CRUD Contratto
Ho realizzato più model nel ControllerContratto che vengono utilizzati nel relativo _form e funziona tutto relgolarmente
Ho realizzato le dropdrwon del model e dei vari model dipendenti.
Del model ContrattoDet in _form ho la seguente situazione:
-
idabbodet (non visibile)
-
idabbo dropdrown che utilizza il model AbboDet
-
tipo (compilazione automatica alla selezione di idabbo)
-
testo (compilazione automatica alla selezione di idabbo)
-
prezzo (compilazione automatica alla selezione di idabbo)
-
attivo (compilazione automatica alla selezione di idabbo)
il multimodelform funziona corettamente per la prima copytemplate ma non per le successive chiedo ai rispettabili componenti della board di darmi dettagliate delucidazioni su come risolvere questo problema.
Allego le sezioni di codice
_form
$tipo=CHtml::listData(AbbonamentiDettaglio::model()->findAll("abbo_det_attivo='y'"), 'idabbo_det', 'abbo_det_tipo', 'idabbo');
$dettaglioFormConfig = array(
'elements'=>array(
//'tipo'=>array('type'=>'text','size'=>40, 'maxlenght'=>255,),
'tipo'=>array(
'id'=>'DETTAGLIO',
'label'=>'TIPOLOGIA',
'type'=>'dropdownlist',
'items'=> $tipo,
'ajax'=>(array(
'type'=>'POST',
'url'=>CController::createURL('Contratto/Prezzo'),
'dataType'=>'json',
'success'=>'function(data) {
$(\'input[name="ContrattoDet[prezzo][]"]\').each(function (i,el) {
var index = i; //0,1,2 etc
var idprezzo = $(el).attr("id"); // l\'id dell\'elemento con jQuery
$("#"+idprezzo).val(data.returnPrezzo);
})
$(\'input[name="ContrattoDet[qta][]"]\').each(function (i,el) {
var index = i; //0,1,2 etc
var idqta = $(el).attr("id"); // l\'id dell\'elemento con jQuery
$("#"+idqta).val(data.returnQTA);
})
$(\'input[name="ContrattoDet[testo][]"]\').each(function (i,el) {
var index = i; //0,1,2 etc
var iddescr = $(el).attr("id"); // l\'id dell\'elemento con jQuery
$("#"+iddescr).val(data.returnDescrizione);
})
$(\'input[name="ContrattoDet[attivo][]"]\').each(function (i,el) {
var index = i; //0,1,2 etc
var idattivo = $(el).attr("id"); // l\'id dell\'elemento con jQuery
$("#"+idattivo).val(data.returnAttivo);
})
}',
'error'=>'function(data){alert(val(data.returnValue));}',
)),
'prompt'=>'SELEZIONA',
'options'=>array($dettaglio->tipo=>array('selected'=>true)),
),
'testo'=>array('id'=>'descrizione','label'=>'DESCRIZIONE','type'=>'text','size'=>10, 'maxlenght'=>255,),
'qta'=>array('id'=>'qta','label'=>'QUANTITA','type'=>'text','size'=>2, 'maxlenght'=>3,),
'prezzo'=>array('id'=>'prezzo','label'=>'PREZZO','type'=>'text','size'=>5, 'maxlenght'=>5,),
'attivo'=>array('id'=>'attivo','type'=>'dropdownlist','items'=>array(''=>'','y'=>'SI','n'=>'NO',)),
));
$this->widget('ext.multimodelform.MultiModelForm',array(
'id' => 'id_dettaglio', //the unique widget id
'formConfig' => $dettaglioFormConfig, //the form configuration array
'model' => $dettaglio, //instance of the form model
'addItemText' => 'AGGIUNGI', // Indica il testo per aggiungere un elemento
'addItemAsButton' => true, // il testo viene visualizzato come bottone
'limitText' => 'Limite raggiunto',
'removeText' => 'RIMUOVI',
'removeConfirm' => 'Confermi la rimozione?',
'removeTextAsButton' => true,
'validatedItems' => $validateDettaglio,
'tableView'=>true,
'hideCopyTemplate' => true,
'data' => $dettaglio->findAll('idcontratto=:IDcontratto', array(':IDcontratto'=>$model->idcontratto)),
));
ContrattoController relativo alla url ajax
public function actionPrezzo()
{
//if (Yii::app()->request->isAjaxRequest) {
$abbodet=$_POST['ContrattoDet'];
if(isset($abbodet)) {
$abbodet = $_POST['ContrattoDet']['tipo'];
$prezzo = AbboDet::model()->findByPk($abbodet)->abbo_det_prezzo;
$descrizione = AbboDet::model()->findByPk($abbodet)->abbo_det_testo;
if(isset($prezzo))
echo CJSON::encode(array(
'returnPrezzo'=>$prezzo,
'returnQTA'=>'1',
'returnDescrizione'=>$descrizione,
'returnAttivo'=>'y',
));
else
echo CJSON::encode(array('returnValue'=>'INDEFINITO'));
}
else {
echo CJSON::encode(array('returnValue'=>'QUERY NON ESEGUITA'));
}
//}
}