26. august 2008 - 13:21Der er
20 kommentarer og 2 løsninger
Menuplacering i CMS
Hey alle sammen, har ledt efter noget hjælp til dette længe! Og fik at vide der skulle være nogle rigtig kloge hoveder herinde som kunne hjælpe.
Jeg har lavet et større cms system, og her vil jeg gerne ha en lille nødvendig feature på som gør det ekstra sprødt. Nemlig at kunne rykke mine sider op og ned i menuplaceringen.
Skal lige siges jeg har gennemsøgt forumet så godt jeg kunne, men har kun fundet asp løsninger :)
Jeg vil ikke bare lave det så den ligger en til eller fra, eller noget i den stil, da dette blir usikkert hvis man sletter en side.
Jeg skal bruge noget der kan finde id på den udskrevne række før, og efter.
Jeg har fundet rækken før, da jeg gemmer en der hedder $lastid til sidst i min while løkke.
Men den er lidt tricky med at finde den næste! og det er her jeg sidder fast
Nu syns jeg at jeg har gået den igennem flere gange, og syns jeg har sat den rigtigt op.. den gør bare ikke noget når jeg prøver. og den kommer ikke med nogen fejl? det kunne selvfølgelig være querystrings id og sort der var noget i vejen med. men det burde der ikke være?
kan man smide hele koden ind her ? :) er ny herinde
$query = mysql_query("SELECT place FROM cases WHERE id = " . $currentID . " LIMIT 1") or die(mysql_error()); if(mysql_num_rows($query)>0) { $currentSort = mysql_result($query,0); }
switch($_GET['sort']) { case "op": $query = mysql_query("SELECT id, place FROM cases WHERE place < ".$currentSort." ORDER BY place DESC LIMIT 1"); break; case "ned": $query = mysql_query("SELECT id, place FROM cases WHERE place > ".$currentSort." ORDER BY place ASC LIMIT 1"); break; default: $moveSort = 0; $moveID = 0; }
if($moveSort > 0) { $query = mysql_query("UPDATE cases SET place = ".$moveSort." WHERE id = ".$currentID." LIMIT 1"); $query = mysql_query("UPDATE cases SET place = ".$currentSort." WHERE id = ".$moveID." LIMIT 1"); } }
har lavet det lidt om så at den passer til mine databasenavne etc.
og her er så mine små pile der skulle kunne flytte op og ned på rækkerne
$query = mysql_query("SELECT place FROM cases WHERE id = " . $currentID . " LIMIT 1") or die(mysql_error()); if(mysql_num_rows($query)>0) { $currentSort = mysql_result($query,0); }
switch($_GET['sort']) { case "op": $query = mysql_query("SELECT id, place FROM cases WHERE place < ".$currentSort." ORDER BY place DESC LIMIT 1"); break; case "ned": $query = mysql_query("SELECT id, place FROM cases WHERE place > ".$currentSort." ORDER BY place ASC LIMIT 1"); break; default: $moveSort = 0; $moveID = 0; }
if($moveSort > 0) { $query = mysql_query("UPDATE cases SET place = ".$moveSort." WHERE id = ".$currentID." LIMIT 1"); $query = mysql_query("UPDATE cases SET place = ".$currentSort." WHERE id = ".$moveID." LIMIT 1"); } }
Jeg ved ikke om det er nødvendigt, men jeg gør det altid. Og kan se andre også gør det: http://dk.php.net/header (ikke at det selvfølgelig gør det rigtigt) :o)
Hvis ikke du sætter exit, så kan du risikere at din script udføre mere kode efter header inden serveren når at modtage forespørgelsen for den nye side.
Ahh ja.. nu er jeg lige stået op, så hjernen er stadig kold.. :) kan man lave noget select mindre/størreend limit 1 ? og så bytte om på id der? hvis det igrunden ik er det som det script der gør :P
Jakobdo, når man skal bytte om på rækkefølgen er det nemmere hvis placeringerne er i rækkefølge uden nogen spring. Så slipper man for at skulle vælge den række før og den række efter, som jo er problemet her... Og det er jo kun 2 mysql operationer ekstra hvergang man sletter en side.. det gør jo ikke den store forskel.
Ewax: Det er bare fordi jeg har sat det op i en class. Det er det samme som mysql_query() og mysql_query(mysql_fetch_array(...
Så den samlede kode, der burde virke uden problemer(Jeg har lige simplified den lidt man kan se hvad der helt præcis bliver gjort): http://pastebin.ca/1186218
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.