Avatar billede Znak Nybegynder
15. november 2009 - 11:50 Der er 2 kommentarer

Menu strukturering

Hej Eksperter!

Jeg mangler hjælp til at lave en træ-struktureret menu, så den kommer til at se således ud

Hovedmenu
  Undermenu
Hovedmenu
  Undermenu

Min kode ser sålede ud, men giver problemer hvis menuID ikke står i rækkefølge

            $GET_art = $mmysqli->query("SELECT menuName,menuUrl,menuParent FROM menu ORDER BY menuPriority desc");

            while ($row = $GET_art->fetch_array(MYSQLI_ASSOC))
            {
                if (!empty($row['menuParent']))
                    {    // UNDERMENU
                        echo "\t\t\t\t\t\t";
                        echo "<li><a href=\"".$row['menuUrl']."\" class=\"p\">".$row['menuName']."</a></li>\n";                   
                    }
                    else
                    { // HOVEDMENU
                        echo "\t\t\t\t\t";
                        echo "<li><a href=\"".$row['menuUrl']."\">".$row['menuName']."</a></li>\n";
                    }
            }

Min database indhold ses her:
    menuID    menuName    menuUrl    menuPriority    menuParent
            1    Forside    forside    NULL    NULL
            2    Underside    underside    NULL    NULL
            3    1-Hoved    Hoved    1    NULL
            4    1-1-under    under-1-1    NULL    3
            5    2-Hoved    hoved    NULL    NULL
            6    1-2-under    under-1-2    NULL    3
Avatar billede intenz Novice
15. november 2009 - 21:44 #1
Den mindre kønne løsning kunne være at smide det i et array i din while løkke, og så efterfølgende outputte menuen.

Noget i stil med:
$GET_art = $mmysqli->query("SELECT menuName,menuUrl,menuParent FROM menu ORDER BY menuPriority desc");
    $menu = array();
    while ($row = $GET_art->fetch_array(MYSQLI_ASSOC))
    {
        if (!empty($row['menuParent']))
        { // UNDERMENU
            $menu[$row[menuParent]]['sub'][] = "\t\t\t\t\t\t<li><a href=\"".$row['menuUrl']."\" class=\"p\">".$row['menuName']."</a></li>\n"
        }
        else
        { // HOVEDMENU
            $menu[$row[menuID]]['parent'] = "\t\t\t\t\t<li><a href=\"".$row['menuUrl']."\">".$row['menuName']."</a></li>\n"
        }
    }

foreach($menu as $topmenu) {
    echo $topmenu;
    if (isset($topmenu['sub'])) {
        foreach($topmenu['sub'] as $submenu) {
            echo $submenu;
        }
    }
}
Avatar billede Znak Nybegynder
17. november 2009 - 16:40 #2
Havde håbet jeg kunne holde den på en simpel linje,

men den eneste udvej er følgende

        <div id="amenu">
            <div id="hmenu">Varergrupper</div>
                <ul>
<?php //ASC (( WHERE menuParent IS NULL ))
            $menuMain = $mmysqli->query("SELECT menuID,menuName,menuUrl,menuParent FROM menu WHERE menuParent IS NULL ORDER BY menuPriority ASC");

            while ($main = $menuMain->fetch_array(MYSQLI_ASSOC))
            {
            // HOVEDMENU
                echo "\t\t\t\t\t";
                echo "<li><a href=\"".$main['menuUrl']."\">".$main['menuName']."</a></li>\n";
            // UNDERMENU
                $menuSekund = $mmysqli->query("SELECT menuName,menuUrl,menuParent FROM menu WHERE menuParent='".$main['menuID']."' ORDER BY menuPriority ASC");
                while ($sekund = $menuSekund->fetch_array(MYSQLI_ASSOC))
                {
                    echo "\t\t\t\t\t\t";
                        echo "<li><a href=\"".$main['menuUrl']."-".$sekund['menuUrl']."\" class=\"p\">".$sekund['menuName']."</a></li>\n";       
                }
            }
?>
                </ul>
            </div>
        </div>
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