Menüpunkt zwischen Menüpunkten einfügen

DeMoehn_sm

Grünschnabel
Guten Tag liebe Community

Ich habe ein kleines Denkproblem.
Ich erstelle gerade eine Art "kleines CMS" und möchte, dass der Benutzer seine Menüpunkte verwalten kann.
Nun habe ich folgende Tabelle: 'mainmenu': id, name, order, ...
order dient dazu, dass auch ein später Eintrag (hohe ID) weiter am Anfang stehen kann.
Nun habe ich folgendes Beispiel:

1 Startseite
2 Über Uns
4 Bilder

Ich möchte nun zwischen 1 und 2 einen Punkt "Test" einfügen.
Der Wert für order (also 2) ist mir bekannt und ich muss praktisch nur noch in der Datenbank die Datensätze hochzählen, bei denen nun order = 2 ist (also "Über uns") und danach den Datensatz bei dem order = Order von "Über uns" ... bis es keine gleichen mehr gibt. (also in diesem Beispiel Schluss nach "über uns".

Habt ihr eine Idee wie ich sowas am geschicktesten bauen kann?

Idee, Tips oder Links reichen mir natürlich auch.

Mfg
 
Ich habe bei mir zwei verschiedene Systeme im Einsatz. Zum einen ähnlich wie bei dir, nur daß in der Tabelle ein extra Index Feld angelegt wird, über das mit beliebigen Zahlen sortiert werden kann. Wenn man von vornherein mit 10er Schritten anfängt, bleibt genug Platz zum Einfügen. Über ein order by kann man das dann sortiert ausgeben, ohne ständig umnummerieren zu müssen, was auch zu Inkonsistenzen führen kann, wenn z.B. ein abhängiges Untermenü existiert.
Die zweite Variante ist eigentlich nur ein Ableger. Der Sortierindex bleibt, nur wird nicht mit frei bestimmbaren Zahlen hantiert, sondern die Menüpunkte werden über JS / Ajax mit der Maus sortiert und auf Befehl mit neuen Zahlen versorgt. Das hat den Vorteil, daß der User nicht erst Zahlen vergleichen muß oder sich merken muß wo noch was frei ist, sondern er verschiebt einfach nur.
 
Hi

Zuerst meine Meinung zu Variante 1:
Das ganze ist eine sehr unschöne Variante und vor allem undurchsichtig und du umgehst damit nicht das Problem beim Ändern der Reihenfolge ;)

zu Variante 2:
Das ist im Grunde das, was DeMoehn_sm will (wenn ich ihn richtig verstanden hab).
Der User soll sich ja auch nicht mit den Zahl der Reihenfolge auseinander setzen sondern das ganze soll ja vom System erledigt werden.
Mein Vorschlag wäre, beim Speichern über alle List-Einträge zu iterieren und für diese die Sortorder in die DB zu schreiben (UPDATE .... SET...). Mit Untermenüs sollte es aus meiner Sicht keine Probleme geben, da diese ja nur die ParentID kennen müssen (bzw. der Parent kennt sein Childs) und nicht die Reihenfolge.
 
Nico Graichen hat Recht.
Meine Untermenüpunkte kennen die ID der Hauptmenüpunkte. Diese bleibt jedoch gleich, es ändert sich nur die zahl des wertes "order". Das Problem bei der 10er Variante, was mache ich, wenn ein User im Laufe der Zeit mehr als 10 mal etwas verschoben, eingefügt hat?

Ich wollte das Ganze so lösen
PHP:
while(mysql_query("UPDATE `mainmenu` SET `order` = `order`+1 WHERE `order` = $zahl AND `mode` = 'user' LIMIT 1;")) {
				$zahl++;
}
Das Problem dabei, ist ganz klar, die Endlosschleife die ich mir dabei erzeuge, weil ich zunächst order = 2 auf order = 3 setzte, nun gibt es aber zweimal den Eintrag von order = 3....

Da ich nicht nur einfach alle Einträge um eins erhöhen will, sondern bestenfalls sogar gerade Lücken stopfen möchte - z.b. 1, 2, 3, 5, dann soll die spätere Folge 1, 2, 3, 4, 5 heißen...

Falls Ideen da sind fände ich das sehr hilfreich.
Ich stehe einfach auf dem Schlauch :D
 
Hi

Ich meinte damit, dass du die Reihenfolge komplett neu setzt in der DB und nicht ein Update vom vorherigen Wert. Problem bei deiner Variante: Wenn mehrere Verschoben / hinzugefügt werden, klappt deiner Methode auch nicht mehr.
Iteriere mit Php über die Menüpunkte und setze für jeden einen Update-Befehlt mit der aktuellen Reihenfolge.
 
Ich würde die Methode mit den Zahlen nicht ganz so verteufeln, immerhin hab ich die bei einem der erfolgreichsten Shopsysteme, xt commerce, abgekupfert. Ist sehr leicht zu bauen und wenn man dem User eine Übersichtsliste mit allen Punkten anbietet, kann er das auch sehr leicht komplett mit neuen Zahlen versehen und die Sortierung aktualisieren. Und für mich ist der größte Vorteil an der Sache, daß man sich nicht mit JS / Ajax rumschlagen muß.
Wer das doch will oder alles grafisch haben will, für den gibt es hier ein relativ leicht umzusetzendes Script. Scriptaculous Lists with PHP
 
Zurück