Avatar billede avminarm Juniormester
26. august 2008 - 08:54 Der er 15 kommentarer og
1 løsning

Udtræk fra DB til menu

Hej

Jeg er faldet over denne menu: http://www.dynamicdrive.com/dynamicindex1/ddlevelsmenu/index.htm som er rimelig nem at bruge som udgangspunkt.

MEN hvordan trækker jeg data ud fra mysql så det kommer korrekt ind i m enustrukturen og uden at udtrækket bliver for tungt?

Min menu database har strukturen:

id  url  linkTxt  parent

Alle "toplevel" menupunkter har parent = 0

Er der nogen der her et godt bud?
Avatar billede jakobdo Ekspert
26. august 2008 - 10:25 #1
Fik et godt link tidligere herinde, som du måske kan bruge:

http://dev.mysql.com/tech-resources/articles/hierarchical-data.html
Avatar billede w13 Novice
26. august 2008 - 10:30 #2
Måske noget i denne her stil:

<?php

/* MySQL-forbindelse her */

function treeMenu($iID,$iLevel){
    $rs=mysql_query("SELECT id,url,linkTxt FROM menu WHERE id=".$iID);
    while($row=mysql_fetch_array($rs)){
        echo '<li><a href="'.$row['url'].'"';
        if(iLevel)echo ' rel="ddsubmenu'.$iLevel.'"';
        echo '>'.$row['linkTxt'].'</a></li>';

        treeMenu($row['id'],$iLevel+1);
    }
}

?>
<div id="ddtopmenubar" class="mattblackmenu">
<ul>
<?php
treeMenu(0,0);
?>
</ul>
</div>

<script type="text/javascript">
ddlevelsmenu.setup("ddtopmenubar", "topbar") //ddlevelsmenu.setup("mainmenuid", "topbar|sidebar")
</script>
Avatar billede w13 Novice
26. august 2008 - 10:31 #3
Det er dog meget utestet!
Avatar billede avminarm Juniormester
26. august 2008 - 11:01 #4
hej begge kigger på det i aften - jeg kan ikke komme til at teste lige nu.

w13>> det ser ud som noget i den retning - men i demo filerne for menuen er toplevel punkterne for sig selv i sin egen DIV og alle underpunkterne står uden for?
Avatar billede w13 Novice
26. august 2008 - 11:55 #5
Men det er det ikke i eksemplet på dit link:

<div id="ddtopmenubar" class="mattblackmenu">
<ul>
<li><a href="http://www.dynamicdrive.com">Home</a></li>
<li><a href="http://www.dynamicdrive.com/new.htm" rel="ddsubmenu1">DHTML</a></li>
<li><a href="http://www.dynamicdrive.com/style/" rel="ddsubmenu2">CSS</a></li>
<li><a href="http://www.dynamicdrive.com/forums/">Forums</a></li>
<li><a href="http://tools.dynamicdrive.com/" rel="ddsubmenu3">Web Tools</a></li>
</ul>
</div>

<script type="text/javascript">
ddlevelsmenu.setup("ddtopmenubar", "topbar") //ddlevelsmenu.setup("mainmenuid", "topbar|sidebar")
</script>
Avatar billede w13 Novice
26. august 2008 - 11:58 #6
Men det er sikkert lidt lige meget, hvor underpunkterne er placeret. De er jo alligevel skjult, til man holder musen over hovedpunkterne, og så placeres de ud for disse.
Avatar billede w13 Novice
26. august 2008 - 11:58 #7
Så eksemplet viser måske bare, at man kan gøre det sådan.
Avatar billede avminarm Juniormester
26. august 2008 - 12:13 #8
Måske - men hvis du åbner demo'en og vælger vis kilde kan du se hvordan undermenuerne er bygget op - jeg tror ikke helt dit forslag henter undermenuerne ud - men der er da en start :o)
Avatar billede w13 Novice
26. august 2008 - 12:32 #9
Gør det ikke? Det skulle det da meget gerne. Hvad genererer min kode så?
Avatar billede w13 Novice
26. august 2008 - 12:35 #10
Ja, så skal den nok laves helt anderledes.
Avatar billede avminarm Juniormester
26. august 2008 - 22:59 #11
arrrgh nu har jeg bakset med det hele aftenen (bl.a. ved hjælp af et gl. script)

Jeg er kommet frem til dette, men kan ikke få <ul> og <li> til at åbne og lukke korrekt - øv - nogen ideer?

function ddlevelmenuTopLevel($barType = "topbar"){
global $prefix;
    $sql = " SELECT id, tekst, link, parent FROM ".$prefix."_menu WHERE vis = 'y'  AND parent = 0 ORDER BY id";
    $result = mysql_query($sql) or die( mysql_error() );
    $str = '<div id="ddtopmenubar" class="horizontalMenu">'."\n";
    $str .= '<ul>'."\n";
    while( $row = mysql_fetch_assoc($result) ){
        $sqlSub = " SELECT id, tekst, link, parent FROM ".$prefix."_menu WHERE vis = 'y'  AND parent = '".$row['id']."'";
        $resultSub = mysql_query($sqlSub) or die( mysql_error() );
        $rows = mysql_num_rows($resultSub);
        if($rows > 0){
            $rel = ' rel="submenuId'.$row['id'].'"';
            $endStr .='<ul id="ddsubmenu'.$row['id'].'" class="ddsubmenustyle">'."\n";
            $endStr .= ddlevelmenuChild($row['id']);
            $endStr .= '</ul>';
        }
        $str .='<li><a href="'.$row['link'].'"'.$rel.'>'.$row['tekst'].'</a></li>'."\n";   
    }
    $str .= '</ul>'."\n";
    $str .= '</div>'."\n";
    $str .= '<script type="text/javascript">'."\n";
    $str .= 'ddlevelsmenu.setup("ddtopmenubar", "topbar") //ddlevelsmenu.setup("mainmenuid", "topbar|sidebar")'."\n";
    $str .= '</script>'."\n";
    $str .= $endStr;
    return $str;
}
//genererer træet med links på
function ddlevelmenuChild($node_id = null, $tab = null) {
    // bruges sådan: generateTree(0);
    global $prefix;    
    $sql = " SELECT id, tekst, link, parent FROM ".$prefix."_menu WHERE vis = 'y' ORDER BY parent, id";
    $result = mysql_query($sql) or die( mysql_error() );
    while( $row = mysql_fetch_assoc($result) ){
        $aTree[] = $row;
    }
    //$str .= "<ul>"."\n";
    if(is_array($aTree)){
        is_null($tab) ? $tab = 0 : $tab++;
        foreach ( $aTree as $aNode ){
            if ($aNode['parent'] == $node_id) {
                for($t = 0; $t < $tab; $t++){
                    $str .= "<ul>"."\n";
                }
                $str .= '<li><a href="'.$aNode['link'].'">'.$aNode['tekst']."</a></li>"."\n";
                $str .= ddlevelmenuChild($aNode['id'], $tab);
                for($t = 0; $t < $tab; $t++){
                    //$str .= "</ul>"."\n";
                }
            }
        }
        $str .= "</ul>"."\n";
    }
    $str .= $str;
    return $str;
}
Avatar billede w13 Novice
27. august 2008 - 07:36 #12
Hvordan bliver koden genereret?
Avatar billede avminarm Juniormester
13. september 2008 - 23:54 #13
jeg har lagt projektet lidt på hylden - men leder stadigvæk efter en multilevel dropdown der kan trækkes ud af af en mysql database?
Avatar billede avminarm Juniormester
08. december 2008 - 14:51 #14
lukker spørgsmål - vil du have lidt points for ulejligheden?
Avatar billede w13 Novice
08. december 2008 - 20:02 #15
Ok.
Avatar billede avminarm Juniormester
08. december 2008 - 21:00 #16
tak for indsats
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