Problemet er at hvis du først updater 2 til at være 3 så har du pludselig 2 3-taller og så går det galt.
Løsningen på dette er at først opdatere 2 til noget som ikke forekommer på forhånd, f.eks. -1, derefter omdøbe 3 til 2m og så tilsidst omdøbe -1 til 3.
Det var også min tanke, men det kunne jo være der var en "nemmere" måde at gøre det på... Men hvordan løser jeg så det med: Er det muligt at sige at menu punkt 1 ikke kan rykkes op og tilsvarende at sidste menupunkt ikke kan rykkes ned?
Hvsi du ikke vil kunne rykke første punkt op (forståligt), så er trivket først at spørge om min og maks værdierene for sorting:
SELECT min(sorting) AS minimum, max(sorting) AS maximum FROM menuTabel
Disse to tal sammenligner du med det sorting på det id som man ønsker at flytte; Hvis dette er lig med minimum så tillader du ikke "flyt op" og hvis det er lig med maksimum så tillader du på tilsvarende vis tilsvarende ikke "flyt ned".
SELECT min(sorting) AS minimum, max(sorting) AS maximum FROM menuTabel
Dette giver dig to tal, minimum og maksimum, for værdierne af sorting.
Dernæst tager du det id, f.eks. 42, som du tænker på at flytte (op eller ned). For dette laver du så et SQL kald for at finde ud af hvad sorting-værdien er for dette:
SELECT sorting WHERE id=42
Hvis så denne sorting-værdi er lig med minimum, så giver du ikke brugeren noget menupunkt for "flyt op". Og hvis den er lig med maksimum, så har du heller ikke noget "flyt ned" punkt. Hvis det ligger imellem de to yderpunkter, så har du selvfølgelig både en "flyt op" og en "flyt ned".
Ja kan godt få det til at virke men glemte lige en ret vigtig detalje ;( Min menu har uendelige undermenu punkter... Altså: Menu1 '>Undermenu1 '>Undermenu2 '>Undermenu3 Osv.... Når jeg flytter et menu punkt skal de underliggende punkter selvfølgelig følge med... Hvordan klarer jeg den?
Min tabel ser sådan her ud: page_id | parent_id | page_name | page_content
Hvis jeg sletter side 2 så opstår der et problem når jeg så opretter en ny side. Den nye side skal i realiteten ha: sort = 4 da undermenu 3 jo har sort = 3 Men hvis jeg så efterfølgende vil flytte undermenu 3 så mangler sort 2 og siden forbliver på sin plads, og den nye side har jo stadigvæk sort = 4
I mine oprindelige kode-stumper så gør det faktisk ikke noget at der er huller i sorteringsrækkefølgen. Men jeg kan jo gætte at du ikke gør det helt på den måde. ;^)
Løsningen på dit problem er at du, når du sletter et menupunkt, også fjerner hullet (vi kunne jo kalde det ”at defragmentere sorteringen” ;^):
$SQL = "SELECT page_id FROM dinMenuTabel WHERE parent_id=" . parent_id . " ORDER BY sorting"; $result = mysql_query($SQL);
$nySorting = 0; while ($row = mysql_fetch_assoc($result)) { $nySorting++; $SQL2 = "UPDATE dinMenuTabel SET sorting=" . $nySorting . " WHERE page_id=" . page_id; mysql_query($SQL2); }
Så må du ha' god ferie når den tid kommer ;O) Og endnu en gang tak for hjælpen...
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.