Dynamisk menu

Tags:    php

Hej,

Dette spørgsmål er stillet mange gange i alverdens fora, men har ikke kunnet finde et ordentligt svar på det.

Jeg vil lave en menu i minimum tre niveauer.

Menuen er bygget op således:

id | navn | parent | rank

Rank bestemmer jo placeringen i menuen, men er det muligt at tilføje nye elementer til menuen som skal have en rank et element i forvejen har. Det vil altså sige det gamle element samt alle under det skal rykkes ned.

Hvordan gør man lettest det? Ved at lave en update forespørgsel der rykker alle ned, eller? :D



8 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 2 karma
Sorter efter stemmer Sorter efter dato
Det er en cascading select og det tror jeg faktisk ikke at man kan lave. du kunne selvfølgelig godt ved blive med at finde den største rank i hver undergruppe indtil der ikke er nogen undergrupper men det ville nok ikke være smart.

Kunne du ikke bare bruge id og parent til at lave din menu med.
menu_item(id)(parent):
Forside (1)(0)
Side1 (2)(0)
-Underside 1 (3)(2)
-Underside 2 (4)(2)
-Underside 3 (5)(2)
Side 2 (6)(0)

så kan du bruge rank til at sortere dem med i SELECT.



Ved ikke om det er dette du menner men jeg har skrevet en artikel her som (hvis jeg har forstået din post rigtigt) skulle være det du ledte efter:
http://www.solutions2all.dk/articles_read.asp?id=225



tror da det ville være lettest.

mysql_query("UPDATE tabel SET rank=rank+1 WHERE rank>='".$rank_val."' AND parent='".$parent_id."'");

hvis du skifter tabel ud med din tabels navn, og sætter $rank_val til den rank det nye item skal have og $parent_id til det nye items parentid burde det der rykke alle de rigtige menupunkter en rank ned. Så det bare at insert det nye menu punkt bagefter :), rent teoretisk i hvertfald det ikke noget jeg har testet :)



tror da det ville være lettest.

mysql_query("UPDATE tabel SET rank=rank+1 WHERE rank>='".$rank_val."' AND parent='".$parent_id."'");

hvis du skifter tabel ud med din tabels navn, og sætter $rank_val til den rank det nye item skal have og $parent_id til det nye items parentid burde det der rykke alle de rigtige menupunkter en rank ned. Så det bare at insert det nye menu punkt bagefter :), rent teoretisk i hvertfald det ikke noget jeg har testet :)


Mange tak :)

Hvis vi nu forestiller os en menuopbygning således:

Forside (1)
Side1 (2)
-Underside 1 (3)
-Underside 2 (4)
-Underside 3 (5)
Side 2 (6) <----

Jeg skal indsætte side 2, som vil komme efter side 1. Den skal have rank 6, men jeg skal have en funktion der tjekker om side 1 har nogle undersider og hvis ja returnere rank for den sidste underside. Er det muligt? :)




Jo det gør jeg også, men den skal jo vide hvor den skal indsætte, hvis jeg vil sætte side 2 ind skal jeg jo vide at den skal have rank 6.:)



det burde være ligegyldigt så længe side fik et id der ikke var brugt som autoincrement jo garentere for, og så længe dens parent blev sat til nul som den jo default er. Så skal du bare sætte dens rank til en højere ind den højest rank på det niveau.



Det er meningen at jeg vil lave en klik-menu på hvert element, hvor der er en mulighed der hedder "indsæt side efter denne" eller noget lignende, derfor skal jeg jo have systemet selv til at afgøre hvilken rank siden skal tildeles.



$efter_mig_id=id'et på det menu punkt der blev klikket.
$navn=navn'et på det nye menu punkt

$res=mysql_query("SELECT rank,parent FROM table WHERE id='".$efter_mig_id."' LIMIT 1");
$row=mysql_fetch_array($res);
mysql_query("UPDATE table SET rank=rank+1 WHERE rank>'".$row['rank']."' AND parent='".$row['parent']."'");
mysql_query("INSERT INTO table(navn,parent,rank) VALUES('".$navn."','".$row['parent']."','".$row['rank']."')");



t