Problema Con Dropdown A Selezione Multipla

Situazione ho dei contatti e dei gruppi di contatti. La relazione tra di loro è di molti a molti, tramite tabella di collegamento

contact 1:N contact_to_contact_group N:1 contact_group

Vi prego: ignorate la nomenclatura

Quando creo o modifico un contatto ho la necessità di avere una lista di tutti i gruppi disponibili, TUTTI, e PRE-SELEZIONATI solo quelli a cui il contatto appartiene.

Per esempio:

Mettiamo che ho i gruppi A, B e C e che il contatto 1 appartiene ad A e C

Nella select devo vedere

A

B

C

ma con A e C già preselezionati.

Devo fare la select ‘a manina’ o c’è modo di usare l’oggetto form dicendogli sia la base dati che i valori da preselezionare ? non mi riesce proprio…

Nell’ogggetto contact naturalmente c’è già una variabile publbica se si chiama $group_id_array, e quano creo la dropdown uso questa come campo. Ma o gli passo tutti i valori (e quindi non me ne seleziona nessuno), oppure gli passo quelli a cui appartiene il contatto (e quindi non mi mostra gli altri…)

Ehm… come l’affrontereste questa cosa?

mmm…

Io uso questo senza l’oggetto form, ma ritengo sia uguale:

Il valore che gli passi deve essere un array e fa da sé.




$r=array(1,2); 

echo CHtml::dropDownList('liv', $r, array(

        ''=>'',

        1=>'Mastri',

        2=>'Conti',

        3=>'Sottoconti',

        4=>'Quarti livelli'

    ),

            array('onchange'=>"this.form.submit();", 'MULTIPLE'=>'multiple')); ?> 

Io ho risolto così




  $my_groups = $model->contact_group;

    

    $selected_groups = array();

    

    foreach ($my_groups as $opt) {

        $selected_groups[$opt->id] = array ('selected'=>true);

    }

    

    echo $form->dropDownListRow(

            $model, 'contact_group_id',

            CHtml::listData($model->client->contact_group, "id", "name"),

            array(

                'multiple'=>true,

                'options' => $selected_groups,

            )

   );



Come dicevo nel primo post: nella lista ci devono essere TUTTI i gruppi (per la precisione tutti quelli del cliente a cui apparteiene quel contatto), ma PRESELEZIONATI ci devono essere solo quelli a cui il contatto appartiene gia.

Praticamente sto fondendo due fonti di informazioni diverse ma aumentarne il significato.

In questo modo l’utente può aggiungere o togliere un contatto da uno o più gruppi senza smattire