Avatar billede ofirpeter Nybegynder
07. juli 2004 - 11:18 Der er 7 kommentarer og
1 løsning

Menu prioritet med MySQL

I det seneste stykke tid har jeg gået og spekuleret på en ny funktion til et lille CMS system jeg leger lidt med for sjov. Nu må tiden være inde til at føre den ud.

Mine menuer er dynamiske, jeg kan altså til hver en tid tilføje og ændre punkterne i menuen. Men hidtil har menuerne bare lagt sig i alfabetisk rækkefølge, og det er jo ikke altid lige smart.

Derfor kunne jeg godt tænke mig et ”pile system” hvor jeg ved at trykke på pilene kunne rykke menupunktet op eller ned. Det er lidt svært at forklare så jeg har tegnet lidt :)

http://www.ofirpeter.1go.dk

Jeg skal så ved at trykke på produkters nedad pil, bytte rundt på priser og produkter. Så menuen kommer til at se således ud:

Forside
Priser
Produkter
Kontakt

Indtil nu har jeg bare haft en simpelt MySQL database hvor punkterne tilføjes/ændres/slettes fra.
Der er bare en tabel med to felter: Navn (navnet på menu punktet) og Tekst (den tilhørende tekst, som står på siden) Er klar over et ID felt måske skal indføres. Men herefter går jeg i stå.

Jeg mangler et skub til at komme videre, jeg er ret blank med hensyn til at løse dette.
Avatar billede exp Juniormester
07. juli 2004 - 11:33 #1
du laver en kolonne "prio"

og pilene skifter så rundt på dem...
Avatar billede exp Juniormester
07. juli 2004 - 11:35 #2
et link kunne så fx se sådan ud:

nedadpil:
change_prio.php?from=2&to=3

opadpil:
change_prio.php?from=2&to=1

så ved den også, at den skal tage nr 3 og sætte til to eller omvendt...
Avatar billede ofirpeter Nybegynder
07. juli 2004 - 13:29 #3
Ja det lyder umeldbart som den vej jeg skal! Og det ville ikke være noget problem hvis det f.eks. kun var 2 jeg skulle flytte op og ned. Men antallet af menu punkter variere jo, og jeg skal derfor have det antal pile, som der er menu punkter. Hvordan kan jeg klare det på en smart måde?
Avatar billede exp Juniormester
07. juli 2004 - 13:50 #4
Jaja - men husk, at det sted den står, ALTID vil være "from" og så skal "to" være +1 eller -1

Mit eksempel tager faktisk udgangspunkt i dit forslag...

giver det mening?
Avatar billede ofirpeter Nybegynder
07. juli 2004 - 15:07 #5
Ikke helt, ville være fantastisk hvis du ville uddybe lidt.

Foreløbig har jeg tilføjet kolonnen "prio" så min database nu ser således ud:

navn               
tekst             
prio 

Jeg har sat prio til "auto_increment" så den automatisk for et tal når jeg tilføjer et menu punkt.

Jeg har også lavet denne side (Har startet med en nedad pil)

http://www.ofirpeter.1go.dk/tekst_valg.php
http://www.ofirpeter.1go.dk/tekst_valg.phps
Avatar billede exp Juniormester
07. juli 2004 - 19:32 #6
Nedadpilen ud for "Kontakt" skal så indeholde dette link:
change_prio.php?from=2&to=3 (opadpilen: change_prio.php?from=2&to=1)

i koden skal du så have byttet rundt på prio[2] og prio[3]

Ved ikke om der findes en lettere måde (gør der sikkert), men en måde kunne være:

<pseudokode>
udskift prio[from] med prio[0]
udskift prio[to] med prio[from]
udskift prio[0] med prio[t]

eksempel:
udskift prio[2] med prio[0]
udskift prio[3] med prio[2]
udskift prio[0] med prio[3]
</pseudokode>
Avatar billede ofirpeter Nybegynder
08. juli 2004 - 18:21 #7
Så fik jeg det endelig til at virke! Er helt stolt! :)
Dummede mig et par gange, men fik rettet op på det her:
http://www.eksperten.dk/spm/517925
http://www.eksperten.dk/spm/518060

Det færdig script kom til at se således ud:

Side 1.
---------------
Link til:
change_prio.php?from=$from&to=$to_op
change_prio.php?from=$from&to=$to_ned

change_prio.php
---------------
<?php
include("conn.php");

$from = $_GET["from"];
$to = $_GET["to"];

$rows = mysql_query("select navn from $table_tekst") or die(mysql_error());
$num_rows = mysql_num_rows($rows);

if($to > 0 && $num_rows >= $to) {
    $hent_from = mysql_query("select navn from $table_tekst where prio='$from'") or die(mysql_error());
  while ($ud_from = mysql_fetch_array($hent_from)){
      $hent_to = mysql_query("select navn from $table_tekst where prio='$to'") or die(mysql_error());
    while ($ud_to = mysql_fetch_array($hent_to)){
        mysql_query("update $table_tekst set prio ='$from' WHERE navn ='$ud_to[navn]'") or die(mysql_error());
        mysql_query("update $table_tekst set prio ='$to' WHERE navn ='$ud_from[navn]'") or die(mysql_error());
      header("Location: tekst_valg.php");
    }
  }
} else {
  header("Location: tekst_valg.php");
}
?>


Tak for hjælpen exp, du må meget gerne svare.
Avatar billede exp Juniormester
09. juli 2004 - 09:11 #8
:-)

Godt du fandt ud af det...
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