Dropdown Menu

Ciao, volevo sapere come procedere per realizzare un menu a tendina caricando gli elementi dal database.

Ho creato 2 tabelle: Gruppo_attivita, Child_attivita; che sono relazionate da una relazione 1 a molti(ho fatto le prove dela relazione con una listview ed è corretta), posso utilizzare un widget o posso estrarre i dati dentro <ul><li></li></ul>, il css vorrei personalizzarlo a mio piacere

Puoi usare il widget CMenu, ti basta riscrivere il css.

Devi impostare gli items come:


items'=>array(

	array('label'=>'Bikes', 'url'=>array('url), 'active'=>($this->id=='bike')),

	array('label'=>'Admin', 'url'=>'javascript:;', 'items'=>array(

	      array('label'=>'Make', 'url'=>array('/zeus/bikeMake'), 'active'=>($this->id=='bikeMake')),

In sostanza in ogni link (item) puoi mettere un array di items che saranno altri link.

Io sono partito con due model, Model Group_attivita dove ho una relazione belongs_to, e un Model Child_attività dove ho una relazione HAS_MANY, il menu dovrei visualizzarlo nella view Attivita(che sarebbe quella del model Attivita), quindi la parte del menu "<ul>" dovrei avere Group_attivita e riesco a visualizzare richiamo il model…,mentre per Child_Attivita che costituirebbe "<li>"… non riesco…, ho fatto queste prove qua

con un foreach riesco a vedere i dati di entrambe le tabelle, ma non ho idea a questo punto come costruire il menu :unsure:

Crea un array da passare a CMenu, fai due foreach annidiati

ma dentro i foreach devo mettere anche la struttura che compone il menu, come quello statico di sotto????

io sto facendo queste prove…


<?php 

    

    $gruppo = Gruppo::model()->findAll();

    $child  = Child::model()->findAll();

       foreach ($gruppo as $key) {

            echo $key->nome . '<br>';


            foreach ($child as $key2) {

                echo $key2->Nome;

            }

        }


//////////////////////statico///////////////////////////////////////

    

            


        $this->widget('zii.widgets.CMenu', array(

        'items'=>array(


        

        array('label'=>'Item1', 'url'=>array('site/index')),

        array('label'=>'Item2', 'url'=>"#", 'linkOptions'=>array('id'=>'myId1'),'submenuOptions'=>array('id'=>'myId','class'=>'menuitems'),'items'=>array(

            array('label'=>'SubItem1', 'url'=>array('site/anot','id'=>'9')),

            array('label'=>'SubItem2', 'url'=>array('site/anot','id'=>'10')),

        )),

        array('label'=>'Item3', 'url'=>"#", 'linkOptions'=>array('id'=>'myId2'),'submenuOptions'=>array('id'=>'myId_a','class'=>'menuitems'),'items'=>array(

            array('label'=>'SubItem1', 'url'=>array('site/anot','id'=>'12')),

            array('label'=>'SubItem2', 'url'=>array('site/anot','id'=>'13')),

        )),

    ),

));




       

?>

riepilogo la situazione al quanto confusa! ops, ho i due Model , nel model GROUP ho la relazione

‘item’=>array(self::BELONGS_TO, ‘Child’, ‘id’),

nel Model Child

‘gruppi’=>array(self::HAS_MANY,‘Gruppo’,‘Gruppo_attivita_idGruppo_attivita’)// l’ultima è la foreign key della tabella child;

nelle prime prove avevo dichiarato la relazione solo nel model Gruppo

‘gruppi’=>array(self::HAS_MANY,‘Gruppo’,‘Gruppo_attivita_idGruppo_attivita’)

e tramite listview ottenevo il risultato desiderato!.

Forse adesso mi sono incasinato! ops ops

facendo i foreach




 $gruppo = Gruppo::model()->findAll();

    $child  = Child::model()->findAll();

       foreach ($gruppo as $key) {

            echo $key->nome . '<br>';


            foreach ($child as $key2) {

                echo $key2->Nome;

            }

        }



cosi ottengo tutti i risultati con findAll,

ecco i risultati

[b]Servizi e Professionisti/b

ArchitettiAutolavaggiCalzolaiEdiliziaAbbigliamentoOttico

[b]Artigiani/b

ArchitettiAutolavaggiCalzolaiEdiliziaAbbigliamentoOttico

[b]Shopping/b

ArchitettiAutolavaggiCalzolaiEdiliziaAbbigliamentoOttico

quindi dovrei creare delle funzioni nel model?

Non riesco a capire

Ho provato anche cosi…,ma sul menu non ottengo dati…




 $gruppo = Gruppo::model()->findAll();

    $child  = Child::model()->findAll();


   


  

/*       foreach ($gruppo as $key) {

            echo '<br><b>'.$key->nome .  '</b><br>';


            foreach ($child as $key2) {

                echo  $key2->Nome;

            }

            

        }

            */


    

            $items=array();

        foreach ($gruppo as $g)

        {

            $items[]=array('label'=>$g->nome,'url'=>'/user/view/'.$g->nome);

        }


        $this->widget('zii.widgets.CMenu', array(

        'items'=>array(array($items)),


        ));

       





       




Ho fatto un pò di progressi…,però è come se non andasse qualcosa nella relazione…,mi manca qualcosa…,perchè i subitems non vengono attributi al gruppo




$gruppo = Gruppo::model()->findAll();

    $child  = Child::model()->findAll();


 

        $items=array();

        foreach ($gruppo as $g)

        {

            $items[]=array('label'=>$g->nome,'url'=>'/user/view/'.$g->nome);


            print_r($items);


            foreach ($child as $c) {

                

                $items[]=array(  'items'=>array(

                                    array('label'=>$c->Nome,'url'=>'/user/view/'.$c->Nome),

                                    ));

            }


        }

 

        $this->widget('zii.widgets.CMenu', array(

        'items'=>$items,


        ));



il risultato che ottengo è questo nell’allegato

La query $child la devi spostare dentro al primo foreach:




        $items=array();

        foreach (Gruppo::model()->findAll() as $g)

        {

            $submenu=array();

            foreach (Child::model()->findAllByAttributes(array('id_gruppo'=>$g->id)) as $c)

                $submenu[]= array('label'=>$c->Nome,'url'=>'/user/view/'.$c->Nome);

            $items[]=array('label'=>$g->nome,'url'=>'/user/view/'.$g->nome, 'items'=>$submenu);

        }

 

        $this->widget('zii.widgets.CMenu', array(

        'items'=>$items,

        ));




grazie sono riuscito a realizzare il menu, ho fatto altre prove e modifiche, ma mi sono accorto che accade una cosa strana




 $items=array();

        foreach (Gruppo::model()->findAll() as $g)

        {

            $submenu=array();

            foreach (Child::model()->findAllByAttributes(array('Gruppo_attivita_idGruppo_attivita'=>$g->idGruppo_attivita)) as $c)

                $submenu[]= array('label'=>$c->Nome,'url'=>array('attivita/categoria','category'=>$c->Nome));

            $items[]=array('label'=>$g->nome,'url'=> $->url, 'items'=>$submenu);


            }




        }

 




        $this->widget('zii.widgets.CMenu', array(

        //'id'=> 'main-menu',	

        //'htmlOptions'=>array('class'=>'sm sm-blue'),

        'items'=>$items,

        ));


        ?>



nel menu padre ho impostato anche l’url dinamicamente… aggiungendo un campo nel database…


  $items[]=array('label'=>$g->nome,'url'=> $->url, 'items'=>$submenu);

però ogni volta che ci clicco mi aggiunge un azione all’url:

primo click vado ad esempio sul menu padre attivita l’url = localhost/sites/applicazione/attivita/index(corretto)

secondo click vado esempio sul menu padre l’url = localhost/sites/applicazione/attivita/site/index

terzo click se ripeto la medesima azione l’url = localhost/sites/applicazione/attivita/site/site/index

ho ricontrollato il codice ed ho corretto :) a chiunque possa essere utile, sbagliando s’impara :D


  $items[]=array('label'=>$g->nome,'url'=> array($g->url), 'items'=>$submenu);