Ik heb een tabel met submenu items vanwaaruit het menu op een website wordt gegenereerd. Deze tabel wordt bijgewerkt zodra er nieuwe pagina's worden toegevoegd in het CMS. Alle nieuwe pagina's komen dus in een submenu. Tot zover geen probleem.

Mijn probleem zit hem in het ordenen van de submenuitems. Natuurlijk kan ik met ORDER BY "gewijzigd" of iets dergelijks werken. Maar ik wil echter dat de gebruiker kan bepalen op welke positie in het submenu een item komt. Heeft iemand een idee hoe ik dit het beste kan realiseren?

Alvast bedankt!
je kunt het menu vanuit een array laden, dan kun je in die array de volgorde aanpassen
Even een vraag ter verduidelijking: wil je dat elk item afzonderlijk een positie kan krijgen of dat de gebruiker de wijze waarop gesorteerd wordt aan kan passen?
@Koen: Dat zou mogelijk zijn, maar dat lost echter niks op. Het probleem is dat de gebruiker moet kunnen bepalen hoe het submenu geordend wordt.

@Mitch: Elk item moet afzonderlijk een positie aangewezen krijgen.
Je kunt deze manier gebruiken, of zoals die hier misschien wat duidelijker uitgelegd staat.

koen schreef op 29.10.2009 17:17
je kunt het menu vanuit een array laden, dan kun je in die array de volgorde aanpassen

Volgens mij weet jij niet waarover je het hebt.
@Karl: Bedankt voor de snelle reactie, ik ga ermee aan de slag!
Ok.

Je wilt dus dat elke gebruiker de volgorde van elk item in het submenu kan bepalen.
Je moet dus per gebruiker voor elk item een index opslaan en bij het ophalen sorteren op die index.

Ter illustratie:
Mitch - Menuitem 1 - Index 2
Mitch - Menuitem 2 - Index 0
Mitch - Menuitem 3 - Index 1

Geeft als menu voor Mitch:
Menuitem 2, Menuiutem 3, Menuitem 1.
@Karl: Het gestuurde item en de tutorial zijn heel netjes echter niet precies wat ik zoek.

@Mitch: Inderdaad dat is de bedoeling, maar nu moeten gebruikers dus ook een item tussen 2 en 3 in kunnen plaatsen bijvoorbeeld.
Dat kan.
Dan zul je de indices aan moeten passen.

Voorbeeld aan de hand van mijn eerdere voorbeeld.
Stel je wilt Menuitem 4 tussen 2 en 3 plaatsen. 2 blijft dan op z'n plek, daarna komt met index 1 Menuitem 4 en voor elk item dat daarna komt verhoog je de index met 1.

Mitch - Menuitem 1 - Index 2
Mitch - Menuitem 2 - Index 0
Mitch - Menuitem 3 - Index 1

wordt =>

Mitch - Menuitem 1 - Index 2+1 = 3
Mitch - Menuitem 2 - Index 0
Mitch - Menuitem 3 - Index 1+1 = 2
Mitch - Menuitem 4 - Index 1
Duidelijk, met 2 queries kan ik de INSERT dus voor elkaar krijgen. Nou is het ook de bedoeling dat de positie (Index in het voorbeeld) met een (of meer) UPDATE query(s) gewijzigd kan worden.

Ik wil bijvoorbeeld Menuitem 4 als laatste (Index 3) in het menu:
Mitch - Menuitem 1 - Index 3-1 =2
Mitch - Menuitem 2 - Index 0
Mitch - Menuitem 3 - Index 2-1 = 1
Mitch - Menuitem 4 - Index 3

Of Menuitem 1 als eerste:
Mitch - Menuitem 1 - Index 0
Mitch - Menuitem 2 - Index 0+1 = 1
Mitch - Menuitem 3 - Index 2+1 = 3
Mitch - Menuitem 4 - Index 1+1 = 2

Hoe ga ik dat voor elkaar krijgen met 1 of meer queries?

@Mitch: Bedankt voor je toewijding overigens.
Eerst ga je even kijken wat je wilt:

Definities:
X = huidige index
Y = nieuwe index

1. Je wilt een nieuw item toevoegen.
Als je een nieuw item toevoegt op plaats Y, moet je alle indices >= Y met 1 verhogen.

2. Je wilt een item naar boven (een lagere index) verplaatsen.
Eerst doe je een boundary test. Een item met index 0 kan gewoon niet lager.
Alle indices >=Y èn <X doe je +1 en verander je X naar Y.

3. Je wilt een item naar beneden (een hogere index) verplaatsen.
Ook hier wellicht een boundary test. Er zit vast wel een limiet aan 't menu?
Alle indices >X èn <=Y doe je -1 en verander je X naar Y.

Succes!

Reageren