Avatar billede Npinv Nybegynder
20. oktober 2011 - 00:30 Der er 2 kommentarer

Menu i PHP/XML

Jeg forsøger at lave en menu i PHP, som skal komme fra et XML feed.
Menuen er i 2 niveauer, og det er niveau 2 jeg ikke kan få til at virke...
Når man har klikket på en hovedmenu, er det meningen at class="Active", plus at når man vælger en undermenu, skal både hovedmenu og submenu class="active" (håber det giver mening)

Strukturen skal være sådan her:
<!-- hovedmenu -->
<li class="active"><a href="#" >Forsiden</a></li>

<li><a href="#" >Rekorder</a>
<!-- submenu -->
<ul>
<li><a href="#">Hurtigst</a></li>
<li class="active"><a href="#">Længst</a></li>
<li><a href="#">Størst</a></li>
<li><a href="#">Mindst</a></li>
</ul>

</li>
<li><a href="#">Historie</a></li>
<li><a href="#">Regler</a>
<li><a href="#" >Sidste nyt</a>
<!-- submenu -->
<ul>
<li><a href="#">Udgivelse 2012</a></li>
<li><a href="#">Udgivelse 2011</a></li>
<li><a href="#">Udgivelse 2010</a></li>
<li><a href="#">Arrangement Bakken</a></li>
</ul>
</li>


Her er min XML fil (den tror jeg er fin nok):
<?xml version="1.0" encoding="iso-8859-1"?>
<menu>
    <menuitem root="" name="Forsiden" menuid="1"/>
    <menuitem root="" name="Rekorder" menuid="2"/>
    <menuitem root="" name="Historie" menuid="3"/>
    <menuitem root="" name="Regler" menuid="4"/>
    <menuitem root="" name="Anmeldelser" menuid="5"/>
    <menuitem root="" name="Kontakt" menuid="6"/>
    <menuitem root="" name="Sidste nyt" menuid="7"/>
    <menuitem root="" name="Støtteforening" menuid="8"/>
    <menuitem root="" name="Galleri" menuid="9"/>
   
    <menuitem root="2" name="Flest" menuid="10"/>
    <menuitem root="2" name="Hurtigst" menuid="11"/>
    <menuitem root="2" name="Størst" menuid="12"/>
    <menuitem root="2" name="Mindst" menuid="13"/>
    <menuitem root="2" name="Længst" menuid="14"/>
    <menuitem root="2" name="Samlinger" menuid="15"/>
    <menuitem root="2" name="Maraton" menuid="16"/>
    <menuitem root="2" name="Højest" menuid="17"/>
    <menuitem root="2" name="Andre" menuid="18"/>
   
    <menuitem root="7" name="Udgivelse 2012" menuid="19"/>
    <menuitem root="7" name="Udgivelse 2011" menuid="20"/>
    <menuitem root="7" name="Udgivelse 2010" menuid="21"/>
</menu>

Og PHP til at hente menu (første niveau virker som sagt):
<?php
$menu = xml2array(file_get_contents('xml/menu.xml'));
$i = 0;
$count = count($menu['menu']['menuitem']);
while ($i <= $count):
    If ($menu['menu']['menuitem'][$i.'_attr']['root'] == '' && isset($menu['menu']['menuitem'][$i.'_attr']['name']) ) {
    echo '<li><a href=id="'.$menu['menu']['menuitem'][$i.'_attr']['menuid'].'">'.$menu['menu']['menuitem'][$i.'_attr']['name'].'</a></li>';
    }
    $i++;
endwhile;
?>

Er der et klogt hoved, der kan hitte ud af hvordan jeg skruer det sidste niveau på?
Avatar billede Npinv Nybegynder
20. oktober 2011 - 01:06 #1
OK, jeg har fået strikket denne her sammen, men det virker lidt som om jeg gør det mere besværligt end det burde være...
<ul>
<?php
$menu = xml2array(file_get_contents('xml/menu.xml'));
$i = 0;
$count = count($menu['menu']['menuitem']);
while ($i <= $count):
    If ($menu['menu']['menuitem'][$i.'_attr']['root'] == '' && isset($menu['menu']['menuitem'][$i.'_attr']['name']) ) {
    If ($_GET['id'] == $menu['menu']['menuitem'][$i.'_attr']['menuid']) $class1='active';
    echo '<li id="'.$class1.'"><a href="?id='.$menu['menu']['menuitem'][$i.'_attr']['menuid'].'">'.$menu['menu']['menuitem'][$i.'_attr']['name'].'</a>';
    $class1='';
   
    $submenu = xml2array(file_get_contents('xml/menu.xml'));
    $i2 = 0;
    echo '<ul>';
    for ($p = 0; $p <= 20; $p++) {
        If ($submenu['menu']['menuitem'][$p.'_attr']['root'] == $menu['menu']['menuitem'][$i.'_attr']['menuid']) {
        If ($_GET['id'] == $submenu['menu']['menuitem'][$p.'_attr']['menuid']) $class='active';
        echo '<li class="'.$class.'"><a href="?id='.$submenu['menu']['menuitem'][$p.'_attr']['menuid'].'">'.$submenu['menu']['menuitem'][$p.'_attr']['name'].'</a></li>';
        $class='';
        }
    }
    echo '</ul>';
    }
    echo '</li>';
    $i++;
endwhile;
?>
</ul>
Avatar billede danco Nybegynder
21. oktober 2011 - 11:45 #2
Det eneste jeg umiddelbart falder over er at du læser XML filen 2 gange, det kan jeg ikke rigtig se den dybere mening i.
Ellers synes jeg det ser fornuftigt ud.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester