Det var inte lätt att hitta någon lösning på problemet att flytta menyrubriker upp eller ner i önskad ordning. Det finns olika lösningar som funkar bra eller dåligt men jag måste förstå hur dessa fungerar. För närvarande har jag för varje menyrubrik en selectbox med total antal rubrikposter tillsammans med onchange men denna lösning verkade inte bra eftersom två poster fick då samma sekvensnr när jag flyttade en menyrubrik upp eller ner.
Jag har sett demo-exemplar med upp- och ner-knappar eller -länkar med värden -1 och +1 men jag tror att två poster kan få samma sekvensnr här också. Har också sett att den första menyrubriken inte har en upp-knapp medan sista menyrubriken inte har en ner-knapp så att man inte överskrider intervallet för totala antalet poster. Det löser man med if-satser. Men vad händer då om två menyrubriker tas bort? Då blir det två sekvensnr som saknas att man får klicka två gånger för att kunna flytta en rubrik.
Har på en mötesplats sett en annan lösning med bilder som sorteras i viss önskad ordning. Där använder man textfält med siffror i ordningsföljd. Jag testade att skriva in en likadan siffra i ett fält och som en annan bild har i sitt fält. Det slutade med att bilden har flyttats men det blev inte likadana siffror, bara unika siffror. Till denna lösning finns en enda Spara ordning-knapp. Denna lösning verkar vara bra men jag förstår inte hur man har löst det där med unika siffror. Vet någon hur man kan göra något liknande?
Finns det någon som har haft erfarenhet av något liknande och som kan tänka sig att dela av denna erfarenhet? Jag vore tacksam om jag kunde ta del av denna värdefulla erfarenhet.
Jag har själv löst samma problem på lite olika sätt. Sist jag löste det så gjorde jag så att jag hade ett unikt nummer som sa vilken ordning menyvalen skulle sorteras. Sedan hade jag upp och ner pilar som gjorde att man kunde flytta objekten upp och ner.
Om du klickar upp så tar du och uppdaterar ordningsvärdet för det objektet (objekt 1) så att det blir ett mindre (sort_order-1), samtidigt uppdaterar du det objektet som har sort_order = objekt 1's nya sort_order och ökar då detta med ett.
För att skicka ner ett objekt gör du tvärt om.
Det viktiga är här att alltid lägga in objekten så att det nyinlagda objekter får den högsta sort_order'n...
Hm... Hoppas att du förstår vad jag menar, kanske inte en glasklar beskrivning...
"Om du klickar upp så tar du och uppdaterar ordningsvärdet för det objektet (objekt 1) så att det blir ett mindre (sort_order-1), samtidigt uppdaterar du det objektet som har sort_order = objekt 1's nya sort_order och ökar då detta med ett."
Det skulle alltså vara 2 uppdate-satser samtidigt om jag har förstått av vad du skrev... ?? Vet inte hur jag ska få kläm på det.
I din länk till sidan som kör SQL satserna så tar du med ditt objekts ID, dess nuvarande position och om du vill flytta upp eller ner. Exempelvis move.php?ID=627&dir=up¤t_sort_order=3
Följande SQL kör du då:
UPDATE tbl_menu SET sort_order = (sort_order + 1) WHERE sort_order = ($_GET['current_sort_order'] - 1) // Flyttar det ovanliggande objektet ett steg ner
UPDATE tbl_menu SET sort_order = (sort_order - 1) WHERE menu_id = $_GET['ID'] // Flyttar vårt objekt ett steg upp.
Det fungerar nu med att flytta menyrubriker i önskad ordningsföljd. Jag fick också göra egna modifieringar som att kolla upp minsta och högsta värde som ett sekvensnr har så man stannar i början eller slutet av ordningsföjden. Och så fick jag också se till att andra menyrubriker som finns på samma nivå och tillhör en annan huvudmenyrubrik inte ska behöva påverkas genom att komplettera första update-satsen med en extra GET-variabel efter WHERE som följande: mysql_query("UPDATE menu SET sequence = (sequence + 1) WHERE sequence = ($_GET['current_sequence'] - 1) AND topmid = '".$_GET['topmid']."'") or die(mysql_error());
Samma sak med andra hållet.
Och så fick jag också se till att andra menyrubriker som finns på samma nivå och tillhör en annan huvudmenyrubrik inte ska behöva påverkas genom att komplettera första update-satsen med en extra GET-variabel efter WHERE som följande...
Ajuste... Glömde den lilla detaljen, sorry!
Bra att du löste det själv- det är så man lär sig :bire
// Nippe
258 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e