Avatar billede irit Nybegynder
20. december 2006 - 17:24 Der er 3 kommentarer og
1 løsning

Generering af en menu ud fra MySQL DB

Jeg skal have lave en funktion som genererer en menu automatisk ud fra en MySQL DB. I min database har jeg en tabel (menu), med:
- ID
- ParentID
- Name

Dvs. når siden første gang loader skal menu items med parentid 0 vises. Jeg er så i tvivl om hvordan jeg skal lave menuen, så hvis man klikker på et item fra  hoved menuen, vises alle undermenuer. Når man så klikker på en undermenu, skal den så vise alle dens undermenuer, og hvis den ingen har, vises indholdet for menuen.

Eks.
- Hardware.
  - RAM
    - DDR
    - SDRAM
  - Grafikkort
    - PCI-E
    - PCI
    - AGP

Håber i forstår, da det er lidt svært at forklare.
Avatar billede wordwrap Nybegynder
20. december 2006 - 23:12 #1
Lavede engang en menu, vil mene den kan det du efterlyser.

class menu{
    var $menuArray,
    $submenuArray;
   
    function menu(){
        $mainGroups = mysql_query("select * from menu where parent = 0 order by sort");       
        while ($rs = mysql_fetch_array($mainGroups)){
            $this->menuArray[$rs[ID]]=$rs[Name];
        }
       
        $subGroups = mysql_query("select * from menu where parent <> 0 order by sort");
        while($rs = mysql_fetch_array($subGroups)){
            $this->submenuArray[$rs['parent']][$rs[ID]]=$rs[Name];
        }
   
    //print_r($this->menuArray);
    //print_r($this->submenuArray);
    }
    function submenu($groupID){
        $submenu = '<div id="sub_'.$groupID.'" class="submenu" style="visibility:hidden; display:none;">';
       
        foreach ($this->submenuArray[$groupID] as $id=>$name){
            if(array_key_exists($id,$this->submenuArray)){
                $submenu.='<a href="java script: showSubMenu(\'sub_'.$id.'\');" class="menuLink">'.$name.'</a><br>';
                $submenu.= $this->submenu($id);
            }else{
                $submenu.='<a href="?group='.$id.'" class="menuLink">'.$name.'</a><br>';
            }
        }
        $submenu.= '</div>';
       
        return $submenu;
    }
    function makeMenu(){
        echo '<table cellpadding="0" cellspacing="0" border="0">';
        foreach ($this->menuArray as $groupID=>$groupName){
            //check if submenu exist
            if(array_key_exists($groupID,$this->submenuArray)){ //submenu exist
                echo '<tr><td><a href="java script: showSubMenu(\'sub_'.$groupID.'\');" class="menuLink">'.$groupName;
                echo $this->submenu($groupID);
                echo '</td></tr>';
            }else{ //no submenu, ordinary link
                echo '<tr><td><a href="?group='.$groupID.'" class="menuLink">'.$groupName.'</td></tr>';
            }
        }
        echo '</table>';
       
    }
    function openGroup(){
        $id = $_GET[group];
        while($this->getParent($id)!= 0){
            $id = $this->getParent($id);
            echo '<script type="text/javascript">showSubMenu(\'sub_'.$id.'\');</script>';
       
        }
       
    }
    function getParent($id){
        $q = mysql_fetch_array(mysql_query("select parent from groups where groupID = $id"));
        return $q['parent'];
    }
}


$menu = new menu();
$menu->makeMenu();
if(isset($_GET[group])&& is_numeric($_GET[group])){
    $menu->openGroup();
}


en smule javascript skal der os til:

<script type="text/javascript">
    function showSubMenu(menu){
        var current = document.getElementById(menu).style.visibility;
        if(current=="hidden"){
            document.getElementById(menu).style.visibility = "visible";
            document.getElementById(menu).style.display = "block";
        }else{
            document.getElementById(menu).style.visibility = "hidden";
            document.getElementById(menu).style.display = "none";
        }
    }
</script>
Avatar billede irit Nybegynder
21. december 2006 - 00:22 #2
Tak. Det er noget i den stil jeg skal have fat i.

Dog skal mit ikke benytte javascript på den måde, men derimod vil jeg bruge ajax.

Hvis andre har et ligende script må de gerne poste det.

Og strange_76, smit et svar hvis du også vil have nogle point.
Avatar billede wordwrap Nybegynder
21. december 2006 - 00:28 #3
du får et svar så :)
Avatar billede irit Nybegynder
21. december 2006 - 00:30 #4
Hermed får du dine point.
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