synapse10
(Marcelorru)
October 16, 2013, 8:39pm
1
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
zaccaria
(Matteo Falsitta)
October 17, 2013, 7:57am
2
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.
synapse10
(Marcelorru)
October 17, 2013, 8:55am
3
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
synapse10
(Marcelorru)
October 17, 2013, 1:42pm
4
con un foreach riesco a vedere i dati di entrambe le tabelle, ma non ho idea a questo punto come costruire il menu
zaccaria
(Matteo Falsitta)
October 17, 2013, 1:57pm
5
Crea un array da passare a CMenu, fai due foreach annidiati
synapse10
(Marcelorru)
October 17, 2013, 2:59pm
6
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')),
)),
),
));
?>
synapse10
(Marcelorru)
October 17, 2013, 4:22pm
7
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
synapse10
(Marcelorru)
October 17, 2013, 6:59pm
8
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)),
));
synapse10
(Marcelorru)
October 17, 2013, 7:27pm
9
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
zaccaria
(Matteo Falsitta)
October 18, 2013, 2:11pm
10
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,
));
synapse10
(Marcelorru)
October 21, 2013, 4:00pm
11
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
synapse10
(Marcelorru)
October 21, 2013, 4:28pm
12
ho ricontrollato il codice ed ho corretto a chiunque possa essere utile, sbagliando s’impara
$items[]=array('label'=>$g->nome,'url'=> array($g->url), 'items'=>$submenu);