Avatar billede superrex Nybegynder
26. april 2004 - 21:03 Der er 7 kommentarer og
1 løsning

Dynamisk "træ" menu

Hejsa
Er der nogen som har en færdig menu liggende (jeg tror at det hedder en træ menu). Den skal været baseret på en mysql db, det vil sige at man bare opretter poster i db'en og så udvidere menuen sig.


Her er et eks på det som jeg mangler:
http://www.easyflight.dk/showChannel.aspx?CID=112&ChannelId=112
Avatar billede dennismp Nybegynder
26. april 2004 - 21:07 #1
Avatar billede dennismp Nybegynder
26. april 2004 - 21:08 #2
Glem det, jeg misforstod spørgsmålet
Avatar billede superrex Nybegynder
26. april 2004 - 21:11 #3
Ok.. det var heller ikke lige det jeg søgte
Avatar billede dennismp Nybegynder
26. april 2004 - 22:19 #4
Prøv at se på dette - er dette nogenlunde hvad du ønsker? (Glem designet, bare tænk på funktionaliteten).. 

Hvis det er, så skal nok lige lave en lille guide + forklaring.
Avatar billede dennismp Nybegynder
26. april 2004 - 22:32 #5
Avatar billede superrex Nybegynder
27. april 2004 - 08:55 #6
Perfekt! lige hvad jeg ledte efter.. Mange tak for hjælpen.

Svar!
Avatar billede dennismp Nybegynder
27. april 2004 - 09:14 #7
ok, printMenu er den funktion du skal lave om - jeg har lavet den, som blev brugt på min side til demo. Funktionen får to argumenter - et array med menuen og level som angiver hvor dybt vi er i træet (top = 0).. I princippet kan du lave det ligeså dybt som du ønsker..

Tabellen består af id (unik nøgle), et navn, parent_id (hvilken anden menu ligger denne under. Alle top-menupunkter ligger under 0. URL - det der skal tilføjes til url'en (se printMenu())

CREATE TABLE `treemenu` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(32) NOT NULL default '',
  `parent_id` int(11) NOT NULL default '0',
  `url` varchar(32) NOT NULL default '',
  PRIMARY KEY  (`id`)
) ;

Lidt data;
INSERT INTO `treemenu` VALUES (1, 'Main1', 0, 'Main1');
INSERT INTO `treemenu` VALUES (2, 'Main2', 0, 'Main2');
INSERT INTO `treemenu` VALUES (3, 'Main3', 0, 'Main3');
INSERT INTO `treemenu` VALUES (4, 'Sub1A', 1, 'Sub1A');
INSERT INTO `treemenu` VALUES (5, 'Sub1B', 1, 'Sub1B');
INSERT INTO `treemenu` VALUES (6, 'Sub2A', 2, 'Sub2A');
INSERT INTO `treemenu` VALUES (7, 'Sub2B', 2, 'Sub2B');
INSERT INTO `treemenu` VALUES (8, 'Sub3A', 3, 'Sub3A');
INSERT INTO `treemenu` VALUES (9, 'Sub3B', 3, 'Sub3B');
INSERT INTO `treemenu` VALUES (10, 'Sub1A1', 4, 'Sub1A1');
INSERT INTO `treemenu` VALUES (11, 'Sub1A2', 4, 'Sub1A2');
   

<?php
include('../lib/db.php');

if( isset($_GET['id']) )
    $menu_id = $_GET['id'];
else
    $menu_id = null;

$menu = getMenu($menu_id);
printMenu($menu); // Example output

function printMenu($menu,$level=0) {
    foreach($menu as $item) {
        $pre = $post = '';
        if( $level == 0 ) {
            $pre = '<font size=+1>';
            $post = '</font>';
        }elseif( $level == 2 ) {
            $pre = '<i>';
            $post = '</i>';
        }
       
        print $pre . '<a href="treemenu.php?id=' . $item['id'] . '&' . $item['url'] . '">' .$item['name'].'</a>' . $post . '<br/>';
        if( $item['submenu'] != null )
            printMenu($item['submenu'],$level+1);
    }
   
}

function getMenu($path) {
    if(! is_array($path) ) {
        $id = $path;
        $path = array();
        do {
            $path[] = $id;
            $sql = "SELECT parent_id FROM treemenu WHERE id = '$id'";
            $res = mysql_query($sql) or die(mysql_error());
            $row = mysql_fetch_array($res);
            if( $row === null )
                $id = 0;
            else
                $id = $row[0];
        }while($id != 0);
        $path[] = '0'; // All path ends at root..
        return getMenu($path);
    }

    $menu = array();
    $parent_id = array_pop($path);
    $sql = "SELECT id, name, url FROM treemenu WHERE parent_id = '$parent_id'";
    $res = mysql_query($sql) or die(mysql_error());

    while($row = mysql_fetch_array($res)) {
        $id  = $row[0];
        $name = stripslashes($row[1]);
        $url  = stripslashes($row[2]);
        if( in_array($id,$path) )
            $submenu = getMenu($path);
        else
            $submenu = null;
        $menu[] = array('id' => $id, 'name' => $name, 'url' => $url, 'submenu' => $submenu);
    }
    return $menu;
}
?>
Avatar billede superrex Nybegynder
27. april 2004 - 09:49 #8
Nej... undskyld

Du skulle bare smide et svar
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