Yii Framework Forum: [Risolto] Problema Con Dropdownlist Multiple. - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

[Risolto] Problema Con Dropdownlist Multiple. Rate Topic: -----

#1 User is offline   Lerstat1968 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 28
  • Joined: 23-October 13

Posted 08 December 2013 - 05:59 AM

Salve!,

sono nuovo nel forum e un principiante con Yii. Sto provando a fare il mio primo progetto di prova, e mi sono scontrato con un problema per me ostico...

Ho una form con tre dropdownlist dipendenti tra loro. In fase di inserimento la prima dropdownlist è già popolata, mentre le altre due si popolano tramite selezione della precedente.
Tutto ok se vado in sequenza, la prima aggiorna la seconda, la seconda aggiorna la terza.
Il problema è che se dopo avere completatao la selezione nelle tre dropdownlist, una variazione nella prima si riflette solo sulla seconda, mentra la terza resta invariata con la selezione precedente, in pratica vorrei che:

1. venga popolata con gli elementi che si riferiscono all'opzione della seconda;
2. oppure venga azzerata, quindi senza elementi, che quindi verranno presi operando una selezione nella seconda.

Spero di non essere stato troppo prolisso e confusionario.

questo è il codice presente nella view:

	<div class="row">
		<?php echo $form->labelEx($model,'id_ufficio_liv2'); ?>
		<?php //echo $form->textField($model,'id_ufficio_liv2'); ?>
                <?php echo $form->dropDownList($model,
                                                'id_ufficio_liv2', 
                                                Ufficio2liv::model()->getElencoUffici2Livello(),
                                                array(
                                                'prompt' => 'Seleziona Ufficio',   
                                                'ajax' => array(
                                                'type'=>'POST', //request type
                                                'url'=>CController::createUrl('utente/popolaUffici3Liv'), //url to call.
                                                //Style: CController::createUrl('currentController/methodToCall')
                                                'update'=>'#'.CHtml::activeId($model,'id_ufficio_liv3'),
                                                //'data'=>'js:javascript statement' 
                                                //leave out the data key to pass all form values through
                                                ))); ?>            
		<?php echo $form->error($model,'id_ufficio_liv2'); ?>
	</div>

	<div class="row">
		<?php echo $form->labelEx($model,'id_ufficio_liv3'); ?>
		<?php //echo $form->textField($model,'id_ufficio_liv3'); ?>
                <?php echo $form->dropDownList($model,
                                                'id_ufficio_liv3', 
                                                $model->isNewRecord ? array() : Ufficio3liv::model()->getElencoUffici3Livello($idUff2Livello),
                                                array(
                                                'prompt' => 'Seleziona Ufficio',   
                                                'ajax' => array(
                                                'type'=>'POST', //request type
                                                'url'=>CController::createUrl('utente/popolaUffici4Liv'), //url to call.
                                                //Style: CController::createUrl('currentController/methodToCall')
                                                'update'=>'#'.CHtml::activeId($model,'id_ufficio_liv4'),
                                                //'data'=>'js:javascript statement' 
                                                //leave out the data key to pass all form values through
                                                ))); ?>            
		<?php echo $form->error($model,'id_ufficio_liv3'); ?>
	</div>        

	<div class="row">
		<?php echo $form->labelEx($model,'id_ufficio_liv4'); ?>
		<?php //echo $form->textField($model,'id_ufficio_liv4'); ?>
                <?php echo $form->dropDownList($model,'id_ufficio_liv4', 
                        $model->isNewRecord ? array() : Ufficio4liv::model()->getElencoUffici4Livello($idUff3Livello),
                        array('prompt' => 'Seleziona Ufficio'));
                ?>
		<?php echo $form->error($model,'id_ufficio_liv4'); ?>
	</div>        



mentre questo è il codice nel controller:

        /**
	 * Carica gli uffici di 3°livello nella dopdownlist.
	 */        
        public function actionPopolaUffici3Liv()
        {
            $criteria = new CDbCriteria;
            $criteria->order = 'nomeufficio ASC';
            $criteria->condition = 'id_ufficio_2liv=:id';
            $criteria->params[':id'] = (int) $_POST['Utente']['id_ufficio_liv2'];
            $data=Ufficio3liv::model()->findAll($criteria);
            $data=CHtml::listData($data,'id','nomeufficio');
            foreach($data as $value=>$nomeufficio)
            {
                echo CHtml::tag('option',
                          array('value'=>$value),CHtml::encode($nomeufficio),true);
            }
          
        }        
        
        /**
	 * Carica gli uffici di 4°livello nella dopdownlist.
	 */        
        public function actionPopolaUffici4Liv()
        {
            $criteria = new CDbCriteria;
            $criteria->order = 'nomeufficio ASC';
            $criteria->condition = 'id_ufficio_3liv=:id';
            $criteria->params[':id'] = (int) $_POST['Utente']['id_ufficio_liv3'];
            $data=Ufficio4liv::model()->findAll($criteria);
            $data=CHtml::listData($data,'id','nomeufficio');
            foreach($data as $value=>$nomeufficio)
            {
                echo CHtml::tag('option',
                          array('value'=>$value),CHtml::encode($nomeufficio),true);
            }
          
        }        


Grazie in anticipo per l'aiuto...
0

#2 User is offline   Lerstat1968 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 28
  • Joined: 23-October 13

Posted 11 December 2013 - 06:35 AM

Up!
0

#3 User is offline   st4nny 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 325
  • Joined: 10-April 12

Posted 11 December 2013 - 07:00 AM

guardati questo:
http://stackoverflow...-or-more-models

devi usare il success nella prima dropdown, per eseguire una funzione js, l'update è comodo ma è una semplificazione e non ti permette di fare quello che desideri.
0

#4 User is offline   Lerstat1968 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 28
  • Joined: 23-October 13

Posted 11 December 2013 - 07:20 AM

ti ringrazio per l'intervento.

Darò un'occhiata...
0

#5 User is offline   Lerstat1968 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 28
  • Joined: 23-October 13

Posted 12 December 2013 - 02:48 AM

Grazie al consiglio di st4nny ho quasi risolto il mio problema.

Nella prima dropdown ho inserito il seguente codice:

'success'=> 'function(data) {
      $("#dropdown2ID").empty();
      $("#dropdown2ID").append(data);
      $("#dropdown3ID").empty();
} ',


e nella seconda:

'success'=> 'function(data) {
      $("#dropdown3ID").empty();
      $("#dropdown3ID").append(data);
} ',


Così facendo variando il valore della prima dropdownlist, le altre due vengono azzerate, e viene popolata solo la seconda.

Il problema è che azzerando le dropdownlist viene tolto anche il prompt, che io ricreo nella action del controller in fase di popolamento..

Naturalmente questo non vale per la terza dropdownlist in cui il prompt viene ricreato a seguito di aggiornamento della seconda dropdownlist.

Esiste un metodo per ricrearlo con la success della prima dropdownlist?

Grazie.
0

#6 User is offline   st4nny 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 325
  • Joined: 10-April 12

Posted 12 December 2013 - 05:15 AM

prova al posto di prompt, empty
array('empty' => 'Seleziona qlcs')); 
invece di
array('prompt' => 'Seleziona qlcs'));


oppure metodo balordo:
array_merge(array(''=>'Seleziona qlcs'), CHtml::listData($data,'id','nomeufficio'));
0

#7 User is offline   Lerstat1968 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 28
  • Joined: 23-October 13

Posted 12 December 2013 - 05:59 AM

Già provato...

Il mio problema era evitare che il contenuto del dropdownlist n.3 non non si riferisse più al contenuito del drop n.2.
Quindi per evitare tutto ciò con success nel primo dropdown azzero tutto.

Avrei bisogno di aggiungere il prompt alle altre dropdownlist direttamente dalla prima, e non da controller.
Per questo avevo pensato ad altro codice da inserire nella success della prima dropdownlist.

Comunque è solo un problema estetico, in quanto solo per un momento nella dropdownlist non c'è niente, in quanto selezionando qualcosa nella seconda il prompt si ricrea..
0

#8 User is offline   st4nny 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 325
  • Joined: 10-April 12

Posted 12 December 2013 - 10:44 AM

risolvila con jquery:

 $("#dropdown2ID").append("<option value="">Seleziona</option>"+data);

0

#9 User is offline   Lerstat1968 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 28
  • Joined: 23-October 13

Posted 12 December 2013 - 10:51 AM

Grazie st4nny,

avevo già visto qualcosa del genere googlando..
aspetto di andare a casa per provare...
0

#10 User is offline   Lerstat1968 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 28
  • Joined: 23-October 13

Posted 13 December 2013 - 02:39 AM

Funziona!

Grazie per l'aiuto st4nny.
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users