[PHP]Menu met subs

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Anoniem: 135133

Topicstarter
--------------------------------------------------------------------------------

Ik heb een script geschreven dat menuitems leest uit een database, maar tussen deze menuitems zitten ook subitems.....
Hier komt het probleem: sommige hoofditems hebben dus ook subitems en dan zou ik graag willen dat de subitems onder de hoofditems komen:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php   
$dbhost = "localhost"; 
$dbuser = "*******"; 
$dbpass = "*******"; 
$dbname = "cms"; 

mysql_connect($dbhost, $dbuser, $dbpass); 
mysql_select_db($dbname) or die ("kan database niet selecteren"); 

    if(!$pos_l) $pos_l = 0;   
    $count = 5;   
    $query = "SELECT menuitem.id, menuitem.naam, menuitem.menu_id, pagina.menuitem_id, menuitem.categorie_id FROM menuitem, pagina WHERE menuitem.id = pagina.menuitem_id AND menuitem.categorie_id = 2"; 
    $info = mysql_query($query) or die ("Lezen gegevens mislukt."); 
    while ($gegeven = mysql_fetch_object($info)) {   
?>   
<tr> 
<td><a href="pagina.php?<? echo "id=",$gegeven->id, "&naam=", $gegeven->naam, "&menu_id=",$gegeven->menu_id, "&menuitem_id=", $gegeven->menuitem_id, "&categorie_id=", $gegeven->categorie_id; ?>"><? echo $gegeven->naam; ?></a><br></td> 
</tr> 
<?php   
}   
?> 

Nu krijg je dus wel een lijst met alle menuitems die in de tabel staan, maar dan niet de goede volgorde (niet de subitems onder het bijhorende hoofditem)

Stukje database:
id categorie_id menu_id naam kleur_kleur

73 2 0 Test F68D6F
3 2 0 Menu F68D6F
72 2 3 Submenu F04E37
82 2 3 Submenu F04E37
139 2 0 normaal menu F68D6F

Zoals je kan zien is het menu_id van de submenu's verbonden met de id van het bijhorende menu!

Acties:
  • 0 Henk 'm!

Anoniem: 135133

Topicstarter
Ik had iets gelezen over $row->level ofzoiets, maar weet niet helemaal hoe dit werkt 8)7

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 01-05 10:36

NMe

Quia Ego Sic Dico.

Anoniem: 135133 schreef op maandag 05 september 2005 @ 09:43:
Ik had iets gelezen over $row->level ofzoiets, maar weet niet helemaal hoe dit werkt 8)7
Klok, klepel? Wat heeft een object met een variabele "level" ermee te maken dat jij je menu niet kan sorteren? :?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • SWINX
  • Registratie: Juni 2001
  • Laatst online: 28-04 21:11
<td><a href="pagina.php?<? echo "id=",$gegeven->id, "&naam=", $gegeven->naam, "&menu_id=",$gegeven->menu_id, "&menuitem_id=", $gegeven->menuitem_id, "&categorie_id=", $gegeven->categorie_id; ?>"><? echo $gegeven->naam; ?></a><br></td>
persoonlijk vind ik dit nogal een ranzige regel eigenlijk...

Je oplossing is verder niet zo heel moeilijk, je zoekt gewoon voor iedere parent, de kindjes op, en die behandeld je weer als parent, om daarbij de kindjes te zoeken.

[ Voor 58% gewijzigd door SWINX op 05-09-2005 10:45 ]

Mannen komen van Mars Tweakers, vrouwen van Venus Bokt


Acties:
  • 0 Henk 'm!

Anoniem: 135133

Topicstarter
Op dit moment werkt het menu wel in JavaScript, maar het moet zegmaar omgezet worden naar PHP. En nog steeds weet ik niet precies hoe dat gaat werken. In JavaScript staat er nu het volgende:
code:
1
if(item.menu_id==this.id)

Zoiets zou het ook moeten zijn in PHP dacht ik, of denk ik nu helemaal verkeerd?

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 04-05 16:02

Creepy

Tactical Espionage Splatterer

Eeeh.. wat wil je gaan omzetten dan? Zaken als het in en uitklappen van zo'n menu bijv. gaat je in pure PHP code (zonder javascript dus) niet lukken.

De vergelijking die je wilt maken kan prima in PHP, dus ook dat is het probleem niet. Ik krijg echter het idee dat je nog niet helemaal begrijpt wat je nu precies wilt en ook niet hoe je dit voor elkaar kunt krijgen.

Er zijn verschillende manieren om menu structuren te genereren uit de database. Hier op GoT zijn er verschillende voorbij gekomen die je met de search kunt vinden.

Je selecteert nu al alle menu items en je loopt hier doorheen. Dus met een kleine check zoals je die in Javascript ook al hebt kan je prima controleren welk item onder welk ander item moet komen.

Dus ja, "zoiets" kan prima in PHP. Dus wat heb je nu zelf al in PHP geprobeerd om die check toe te voegen en wat lukte daar niet mee?

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 22-04 11:20

Bosmonster

*zucht*

SWINX schreef op maandag 05 september 2005 @ 10:45:
[...]

persoonlijk vind ik dit nogal een ranzige regel eigenlijk...

Je oplossing is verder niet zo heel moeilijk, je zoekt gewoon voor iedere parent, de kindjes op, en die behandeld je weer als parent, om daarbij de kindjes te zoeken.
Yeah maar het is wel zo efficient om eerst alles op te halen als je toch het hele menu weer wilt geven dan dat je recursief query's uit gaat voeren.

Voor je sortering maakt het niet uit, gewoon sorteren op waar je normaal ook op sorteert (volgnummer of iets dergelijks). En vervolgens in script het even netjes in een array zetten gesorteerd op parent (je originele sortering van de items blijft dan gewoon in stand).

Maar om het proberen met meerdere query's of een hele ingewikkelde direct goed uit de DB te krijgen lijkt me nogal onzinnig en zonde van de performance. Een simpel loopje in PHP en je hebt er zo een hierarchisch arraytje van.
Pagina: 1