Avatar billede jacob_m Nybegynder
31. august 2006 - 12:49 Der er 4 kommentarer og
1 løsning

Menu sortering !

Hey.

Jeg har udviklet et menuscript hvor man indsætter nogle tabeller i en db som så bliver hentet ud som en menu. Her er databasen

CREATE TABLE `kajak_menu` (
  `id` int(4) NOT NULL auto_increment,
  `navn` varchar(255) NOT NULL default '',
  `link` varchar(255) NOT NULL default '',
  `order` int(11) default '0',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM COMMENT='Menusystem beta..' AUTO_INCREMENT=31 ;

Det virker sådan set fint nok. Nu har jeg så eksperimenteret lidt med at lave en funktion som skal styre i hvilken rækkefølge menupunkterne skal komme. Så det ikke bare er efter id, eller navn. Men efter en givet række følge. Til dette har jeg order. Som i min "tilføj menupunkt"-funktion har samme nummer som id´et.

Nu er mit spørgsmål så hvordan jeg skal formulere en funktion til styring af rækekfølgen. Der behøves ikke så meget en php-kode. Men bare en skriftlig formulering af hvordan dette kan gøres? Er nemlig helt på bar bund!

Min problemstilling er at man på en eller anden måde ikke må få dubletter af order nummerne!
Avatar billede fcknet Nybegynder
01. september 2006 - 00:39 #1
Lad os sige du har følgende data i din tabel:

mysql> select * from kajak_menu;
+----+-------------+-----------+-------+
| id | navn        | link      | order |
+----+-------------+-----------+-------+
| 31 | Menupunkt 2 | test2.php |    2 |
| 32 | Menupunkt 1 | test1.php |    1 |
| 33 | Menupunkt 3 | test3.php |    3 |
+----+-------------+-----------+-------+
3 rows in set (0.00 sec)

Det du skal tænke er følgende: "Jeg vil rykke menupunkt 1 OP". Dette gør du ved at bytte om på order for "Menupunkt 2" og "Menupunkt 1", altså udføre følgende queries:

UPDATE kajak_menu SET `order` = 1 WHERE id = 32;
UPDATE kajak_menu SET `order` = 2 WHERE id = 31;

Herefter vil din tabel se således ud:
mysql> select * from kajak_menu;
+----+-------------+-----------+-------+
| id | navn        | link      | order |
+----+-------------+-----------+-------+
| 31 | Menupunkt 2 | test2.php |    2 |
| 32 | Menupunkt 1 | test1.php |    1 |
| 33 | Menupunkt 3 | test3.php |    3 |
+----+-------------+-----------+-------+
3 rows in set (0.00 sec)

På den måde vil du ikke få dubletter i dit system. Du skal så efterfølgende indføre tjek, således at der ikke kan rykkes henholdsvis op og ned hvis punktet enten er øverst eller nederst.
Avatar billede jacob_m Nybegynder
04. september 2006 - 16:33 #2
Opstil signariet at jeg har 7 punkter

og vil flytte punkt 5 op til plads 2 og rykke de andre ned. Det er dette som er mit problem ret teknisk. Da dette jo skal gøres dynamisk.
Avatar billede Slettet bruger
04. september 2006 - 23:09 #3
Fcknets løsning bygger på at du rykker en op og ned af gangen.
Avatar billede jacob_m Nybegynder
05. september 2006 - 15:39 #4
phillip > Det er jeg umiddelbart godt klar over, derfor jeg postede et yderligere eksempel. For at forklare dybdere hvad min problem stilling er.
Avatar billede aeroone Nybegynder
06. september 2006 - 17:48 #5
Hvad sker der ved at have dubletter af order? det eneste der sker hvis du feks har 2 punkter med hvor deres order er 1, bliver de bare listet efter id'et

+----+-------------+-----------+-------+
| id | navn        | link      | order |
+----+-------------+-----------+-------+
| 31 | Menupunkt 2 | test2.php |    2 |
| 32 | Menupunkt 1 | test1.php |    1 |
| 33 | Menupunkt 3 | test3.php |    1 |
+----+-------------+-----------+-------+

her vil menupunkt 1, blive listet først, eftersom, at den har det mindste ID.

Så du kan jo lave en side, hvor du lister din menu, efter order, og efter hver linje har du en knap 'OP' som trækker 1 fra order, og en knap 'NED' som lægger 1 til order
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