Avatar billede synonymer Nybegynder
01. juli 2010 - 00:07 Der er 2 kommentarer og
1 løsning

MySQL sortering af menu-udtræk

Hej alle!

Jeg har før fået hjælp i denne tråd: http://www.eksperten.dk/spm/910769

Jeg er dog løbet ind i et problem. Menupunkterne bliver ikke sorteret og vist i korrekt rækkefølge i overensstemmelse med tabellen.



Tabellen:

------------------------------------------------------
| id | parent    | prio | title        | url          |
------------------------------------------------------
| 1  | 0        | 1    | Hovedmenu 1  | /hovedmenu-1/ |
| 2  | 0        | 2    | Hovedmenu 2  | /hovedmenu-1/ |
| 3  | 0        | 3    | Hovedmenu 3  | /hovedmenu-2/ |
| 4  | 0        | 4    | Hovedmenu 4  | /hovedmenu-2/ |
| 5  | 0        | 5    | Hovedmenu 5  | /hovedmenu-1/ |
| 6  | 0        | 6    | Hovedmenu 6  | /hovedmenu-2/ |
| 7  | 3        | 1    | Undermenu 1  | /undermenu-2/ |
------------------------------------------------------


Og min kode her:

// Array to hold the menu
$mainmenu = array();

// Get all menu-items from DB
//$sql = "select * from sider order by 'prio' asc";
//$query = mysql_query("select * from sider order by prio asc, parent asc");

$sql = 'select * from sider order by prio asc;';
$query = mysql_query($sql);

// Loop through results, if any
if (mysql_num_rows($query)){
    while ($row = mysql_fetch_object($query)){
        // If no parent
        if ($row->parent == 0){
            // Create as parent in the menu array
            $mainmenu[$row->id] = array(
                'title'    =>    $row->title,
                'url'    =>    $row->url,
                'prio'  =>    $row->prio
            );
        }
        else{
            // Create as child of the parent in the menu array
            if (!isset($mainmenu[$row->parent]['submenu'])){
                $mainmenu[$row->parent]['submenu'] = array();
            }
            $mainmenu[$row->parent]['submenu'][$row->id] = array(
                'title'    =>    $row->title,
                'url'    =>    $row->url,
                'prio'    =>    $row->prio
            );
        }
    }
}


// Dump mainmenu
// echo '<pre>'.print_r($mainmenu, true).'</pre>';

// Loop through main menu
foreach ($mainmenu as $menu){
    // Show main menu
    echo '<li><a href="'.$menu['url'].'">'.$menu['title'].'</a>';
    // Check for sub menus
    if (isset($menu['submenu']) && count($menu['submenu'])){
        // Loop through sub menus
        echo '<ul>';
        foreach ($menu['submenu'] as $submenu){
            // Show sub menu
            echo '<li><a href="'.$submenu['url'].'">'.$submenu['title'].'</a></li>';
        }
        echo '</ul>';
    }
    echo '</li>';
}



På forhånd tak! :-)
01. juli 2010 - 06:49 #1
Ved at ordne paa prio faar du raekkerne trukket ud i forkert raekkefoelge.  Undermenu1 har jo samme prio som Hovedmenu1.  Jeg proevede at aendre din query paa tre maader og paa alle tre maader gav det nedenstaaende resultat:

$sql = 'select * from sider;';
$sql = 'select * from sider order by parent asc;';
$sql = 'select * from sider order by parent asc, prio asc;';

Hovedmenu1
Hovedmenu2
Hovedmenu3
    Undermenu1
Hovedmenu4
Hovedmenu5
Hovedmenu6

Tillad mig en sidebemaerkning.  Du fik ikke lukket dit tidligere spoergsmaal http://www.eksperten.dk/spm/912573 . Maaden at lukke et spoergsmaal paa hvor svareren ikke skal have (eller ikke vil have) points er selv at oprette et indlaeg som svar (saa det markeres med gult) og saa acceptere svaret (ved at klikke i firkanten og derefter klikke i feltet 'accepter svar og afgiv points'.  Som det er nu er spoergsmaalet blevet haengende som aabent i svarerens liste af indlaeg.
03. juli 2010 - 09:33 #2
synonymer, fik du mit indlaeg?  Jeg er spaendt paa din reaktion, om mit forslag var til hjaelp.
Avatar billede synonymer Nybegynder
03. juli 2010 - 11:32 #3
Jeg beklager en sen tilbagemelding!

Din løsning har været til rigtig meget hjælp. :-)
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