[PHP] Menustructuur met submenu's ophalen uit database

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • DeepFreeze.NL
  • Registratie: April 2006
  • Laatst online: 02-03 08:01
Ik wil graag de menu van een website uit een MySQL database halen. Mijn probleem is dat het menu ook uit submenus bestaat. Om ervoor te zorgen dat het juiste submenu onder het juiste hoofdmenu komt te staan heb ik een kolom met volgorde opgenomen in mijn tabel. Dit ziet er als volgt uit:

idmenunaamvolgorde
1Hoofdmenu1100
2Hoofdmenu 2200
3Submenu 1 van Hoofdmenu 2201
4Submenu 2 van Hoofdmenu 2202


Ik heb dus van elke hoofdmenu een honderdtal (100, 200, 300, 400, etc.) gemaakt en van elke submenu het bijbehorende hondertal + 1 (201, 202, 203, 204, 205, etc.). Mijn eerste vraag is of dit een verstandige oplossing is?

Dit menu moet vervolgens getoond worden op de onderstaande manier.
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<ul>
    <li class="submenu"><a href="">Menu zonder submenu 1</a></li>
    <li class="submenu"><a href="">Menu zonder submenu 2</a></li>
    
    <li><a class="menuTitle">Met met submenu 1</a>
    <ul>        
        <li><a href="">Submenu 1</a></li>               
        <li><a href="">Submenu 2</a></li>               
        <li><a href="">Submenu 3</a></li>               
    </ul>
    </li>

    <li><a class="menuTitle">Met met submenu 2</a>
    <ul>        
        <li><a href="">Submenu 1</a></li>               
        <li><a href="">Submenu 2</a></li>               
        <li><a href="">Submenu 3</a></li>               
    </ul>
    </li>
</ul>

Hoe kan ik er in PHP voor zorgen dat de verschillende submenus onder de juiste hoofdmenu komt te staan? Ik heb namelijk werkelijk geen idee hoe ik dit moet aanpakken. Ik wel leuk aan de slag gaan met een if/else methode, maar dat lijkt mij totaal geen "mooie/goede" oplossing. Wie kan mij een beetje de juiste richting in duwen? Niet zozeer in concrete code oplossingen, maar meer met welke methodes ik het beste kan gebruiken :).

De volgende functie heb ik reeds in PHP aangemaakt:
PHP:
1
2
3
4
5
function getNavigation() {
    $result = mysql_query("SELECT menunaam, volgorde FROM menu ORDER BY volgorde");
    while($row = mysql_fetch_array($result)){
        //
    }


Misschien niet onnodig om te vertellen: Ik ben een beginner met PHP :).

Acties:
  • 0 Henk 'm!

  • aaajeetee
  • Registratie: Augustus 2002
  • Laatst online: 20-09 16:31
Ik zou in de database een kolom "parent_menu_id" aanmaken en dit veld gebruiken om aan te geven onder welk hoofdmenu een/het submenu hoort.

Acties:
  • 0 Henk 'm!

  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 21-08 11:20
Kijk eens naar crisp's blogpost: Formatting a multi-level menu using only one query

We are shaping the future


Acties:
  • 0 Henk 'm!

  • DeepFreeze.NL
  • Registratie: April 2006
  • Laatst online: 02-03 08:01
Ziet er zeer bruikbaar uit :). Ik ga me er in verdiepen. Thanks!

Edit: Precies wat ik zocht, perfect! _/-\o_

[ Voor 6% gewijzigd door DeepFreeze.NL op 02-06-2008 21:31 ]


Acties:
  • 0 Henk 'm!

  • Vokx
  • Registratie: April 2008
  • Nu online
Wat Alex) zegt :+. Als je zoekt op het internet komt je vaak recursieve functies tegen die door middel van het database de childs ophaalt. Dit is natuurlijk sterk af teraden :).

Acties:
  • 0 Henk 'm!

Verwijderd

Vokx schreef op maandag 02 juni 2008 @ 20:51:
Wat Alex) zegt :+. Als je zoekt op het internet komt je vaak recursieve functies tegen die door middel van het database de childs ophaalt. Dit is natuurlijk sterk af teraden :).
Tenzij je de output netjes cached ipv bij elk bezoek het hele menu weer gaat lopen renderen. Zwelf kies ik vaak voor deze methode waarbij enkel een nieuw volledig menu wordt gegenereerd wanneer er in de admin iets in de menu structuur wordt gewijzigd.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op dinsdag 03 juni 2008 @ 00:57:
[...]

Tenzij je de output netjes cached ipv bij elk bezoek het hele menu weer gaat lopen renderen. Zwelf kies ik vaak voor deze methode waarbij enkel een nieuw volledig menu wordt gegenereerd wanneer er in de admin iets in de menu structuur wordt gewijzigd.
Dat is wat lastiger bij context-sensitive menu's welke afhankelijk van de pagina/gebruiker/rechten/andere_parameter worden opgebouwd zodat er een (zo goed als) oneindig aantal mogelijkheden/combinaties zijn ;)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1