Avatar billede isha Nybegynder
25. januar 2010 - 13:40 Der er 11 kommentarer

Move up and Move down

Hey,

Jeg har siddet og kigget lidt herinde på forummet, efter en evt. løsning på mit problem.

Men har ledt forgæves...

Jeg har fået til opgave at indskrive noget kode som gør det muligt for en admin at logge ind og ændre rækkefølgen på retterne, på denne menu - http://www.fiskebaren.dk/da/maden.php

Indtil videre har jeg lidt Post methods og følgende

echo "<td><font size='1'>Flyt</font></td>";
echo "<td><input type='submit' name='move[][".$attrib->id."]' value='" . $attrib->id . "' /></td>";
echo "</tr>";

Som sagt skal man både kunne flytte op og ned på rækkefølgen.

Håber I kan hjælpe
Avatar billede public2 Nybegynder
25. januar 2010 - 13:54 #1
Uden helt at vide om det præcis er det du ønsker, så tænker jeg at du i din database kan lave en række der f.eks. hedder "position", og har et tal (lad os sige fra 1 ... x).

Når du så udskriver din række af menuer, så kan du jo sortere dem i rækkefølge ud fra "position" så det laveste (eller højeste) tal står øverste og ellers ned af.

Når du så skal ændre i rækkefølgen kan man forestille sig at ud fra hver menu, er der en "op" og en "nedad" pil. Disse pile kan så henholdsvis increment (++) og decrement (--) på deres "position" nummer.

Så skal du muligvis lave nogle tjek for når det er nummer "1" og det sidste nummer der bliver forøget og formindsket, men det kan laves ved nogle tjek.
Avatar billede isha Nybegynder
25. januar 2010 - 14:04 #2
Det var en mulighed bestemt.

MEn du har forstået det rigtigt, jeg ønsker at kunne flytte f.eks. en enkelt ret 2 eller 3 takker op, således at den f.eks. ligger øverst.

Efter hvad jeg har ladet mig fortælle så kan man skrive det direkte ind uden at skulle rode for meget med databasen?

Er dette korrekt?
Avatar billede public2 Nybegynder
25. januar 2010 - 14:10 #3
Jah, altså du kan gøre det i Ajax (evt. med brug af Cookie) hvor du har placeret en række, f.eks. divs som så kan have en position. Den kan du så enten trykke op eller ned eller simpelthen rykke den med drag-n'-drop.

Du kan så gemme positionerne i en cookie for hver bruger, men jeg vil nu stadig anbefale at lave det i databasen.
Derved ikke sagt at du ikke også kan lave noget Ajax lir, men det giver dig bare en større dynamik (efter min mening) at have gemt positionen, så du ved at den altid er ens for alle brugere, uanset hvad.

Positionen skal jo gemmes et eller andet sted, så du kommer ikke helt uden om en form for persistens, med textfil, XML, cookie, database eller noget femte, så det er i min mening, et godt bud at smide det i en database.

Vi taler jo ikke om en større ændring eller redesign af database strukturen, blot et par få tilføjelser til db og kode.
Avatar billede public2 Nybegynder
25. januar 2010 - 14:11 #4
Derudover, du trækker jo allerede dine data ud fra databasen, så det er blot en tilføjelse til din SQL query at den skal sortere
Avatar billede isha Nybegynder
25. januar 2010 - 14:21 #5
Hmm, jeg har nogle XML filer liggende...

Kunne du give et eksempel på hvad der skulle tilføjes for at kunne flytte et element op? Altså rent kodemæssigt?

Føler lidt at jeg er ude på herrensmark :/
Avatar billede isha Nybegynder
25. januar 2010 - 14:37 #6
Der er ikke koblet nogen database til.
Avatar billede public2 Nybegynder
25. januar 2010 - 14:38 #7
Jeg har ikke lige tid nu, men kan da godt gøre det senere, men altså det er noget med at du ud fra hver iteration du har i en while-loop, så finder du jo det korrekte ID til menuen. Og så har du enten to pile, en drop-down eller hvordan du vil, hvor du får den til at sige "position++" eller "position--"

Så bruger du jo så en SQL Query med UPDATE til at opdatere feltet. Hvad du også kan er at have et tekstfelt hvor du bare kan skrive positionstallet i, men så skal du bare lave tjeks på, at det ikke allerede er brugt.

Og så kommer jeg lige i tanke om, at du selvfølgelig ikke kan nøjes med at opdatere det ene element. Når et element rykker en plads ned, så skal det jo så gerne skifte plads med det forrige element, som så kommer en op.

Jeg har en kode jeg engang lavede som minder meget om det, men har den desværre ikke her, så hvis du ikke har fået en anden løsning eller selv klaret det inden i aften, så vil jeg gerne prøve at finde den og skrive den herind.
Avatar billede public2 Nybegynder
25. januar 2010 - 14:45 #8
Okay, jamen hvordan ser det så ud? Er det hele kørt fra XML fil eller anden fil eller er det hardcodet ind i HTMLen?

Det hele afhænger jo lidt af hvordan siden er sat sammen, og selvom jeg da vil anbefale at benytte en database, da det kan og vil gøre dit liv så meget nemmere på længere sigt, så er der selvfølgelig løsninger ved sider uden, f.eks. med XML.

Jeg mener også jeg har nogle scripts, som gør at man kan sætte positionen på forskellige div's (som f.eks. iGoogle), dem kan jeg også prøve at finde frem i aften.
Avatar billede isha Nybegynder
25. januar 2010 - 14:52 #9
Jeg har tjekket iGoogle ud - og har også foreslået en database, men dette var ikke en mulighed.

Jamen,den extender en xml fil, og ellers er det hardcodet ind i.
Ville gerne sende dig filerne, men ved ikke om jeg har tilladelse til det.
Avatar billede public2 Nybegynder
25. januar 2010 - 15:11 #10
Nej så bare lad vær med det, ingen grund til at give noget ud der ikke er tilladelse til.

Er det hardcodet bliver det naturligvis noget mere besværligt, for selvom du med en metode som iGoogle bruger, så vil den jo være brugerspecifik når du gemmer den i en cookie.

Dernæst kan det gemmes i en session, men så vil den udløbe.

Hvis det er i en XML fil, så er jeg ikke klar over, om man kan opdatere kun dele af XMLen når den skal opdateres (har ikke lavet så forfærdelig meget i XML), men kan man ikke, skal hele filen jo skrive på ny hver gang der er en opdatering. Dette behøver selvfølgelig ikke være noget besværligt da det ikke er hver eller hveranden dag menuen måske skal opdateres.
Styrken i XML er, at du kan sætte det op som stod det i en database (sådan da) med dine tags og stadig loade filen ind med en position, men hvad angår hastighed og køretid har jeg ikke undersøgt.

Det vil under alle omstændigheder, som jeg kan se det, blive mere omstændigt og mere besværligt når det er en mere rigid platform der bliver kørt på.

Men ellers og nu er det lidt gætterier, så kan det måske klares med en datatype som et Array, Linked List eller muligvis en træstruktur som Recursive Tree.

Et array har index startende fra 0. Hver index har en værdig (nøgle) (v,k). Du vil muligvis kunne foretage ændringer i din array. Jeg har i PHP ikke arbejdet så meget med Arrays så her kunne det måske være en fordel at få en anden på banen der lige præcis ved hvordan sådan noget foregår i PHP, men det er muligvis en mulighed.
Avatar billede phliplip Nybegynder
26. januar 2010 - 09:36 #11
Hvis menuens indhold ligger i en XML fil er det muligt at lave et script der kan flytte et element op eller ned i dom-træet.

Kig evt. på http://dk2.php.net/dom, der ligger alle værktøjerne der skal bruges til at loade en fil, flytte nodes, og gemme filen igen.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester