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?
@Mitch: De opzet is duidelijk morgen ga ik proberen het uit te werken.
@Hoithebest: Met gewoon een veld postitie aan maken ben je er bij lange na nog niet. Lees de reacties van Mitch, dan wordt duidelijk waar ik naartoe wil.
Nu de grootste uitdaging: queries maken van dit verhaal... morgen ga ik ermee aan de slag, ik zal de queries hier posten als het gelukt is.
Misschien nog een tussenoplossing. Er is een handig MooTools object, Sortables geheten. Daarmee kun je de onderdelen van een list verslepen.
Die gebruik ik vaak in mijn CMS-en. Je laat de user de items in de goedevolgorde slepen, en daarna verzend je een formulier waarin de volgorde van de items meegenomen wordt (bijvoorbeeld met een hidden field).
@Jan: Dat is ook een idee natuurlijk. Ik gebruik zelf jQuery maar ik heb een dergelijke toepassing ook gezien voor jQuery. Het ziet er natuurlijk goed uit, een nadeel is dat ik deze mogelijkheid niet in mijn huidige (HTML)tabel kan integreren. Ik moet dan een nieuwe pagina aan maken voor de volgorde van de menuitems. Ik ga zeker ook naar deze optie kijken.
Edit: Ik heb zojuist een script met tekst en uitleg gevonden die zo ongeveer doet wat Jan suggereerde. Kan het jammergenoeg nog niet testen in mijn eigen CMS (lokaal op de laptop!).
Het toevoegen van berichten met een bepaalde postitie in het submenu werkt nu. Voor de geinterreseerden, ik gebruik de volgende queries:
UPDATE menu SET
index = index + 1
WHERE index >= $index
INSERT INTO menu SET
page_id = $page_id,
index = $index
...
De postitie(index) wordt door de gebruiker geselecteerd uit een select veld. De maximale postitie hierin is het aantal submenuitems van de geselecteerde pagina + 1.
Edit: Ook de UPDATE query is gelukt, ik post hem even voor degene die met hetzelfde probleem zit. Ik heb het probleem simpel opgelost en er moet nog aan gesleuteld worden.
In het paginaoverzicht kan de index van een pagina met een knopje omhoog of omlaag worden gezet. De knop voor omlaag verschijnt niet als de index 1 is en dus niet lager kan, de knop voor omhoog verschijnt niet als de index gelijk is aan de max (het aantal items in het submenu).
<?php
public function setIndex($item_id, $page_id, $index, $direction) {
if($direction == up) {
$query_a = 'UPDATE menu
SET index = index - 1
WHERE index = "'.($index + 1).'"
AND page_id = "'.$page_id.'"';
$query_b = 'UPDATE menu
SET index = "'.($index + 1).'"
WHERE menu_id = "'.$item_id.'"';
} else {
$query_a = 'UPDATE menu
SET index = index + 1
WHERE index = "'.($index - 1).'"
AND page_id = "'.$page_id.'"';
$query_b = 'UPDATE menu
SET index = "'.($index - 1).'"
WHERE content_id = "'.$item_id.'"';
}
$result = mysql_query($query_a);
$result = mysql_query($query_b);
header('location: '.$this->location);
}
?>