Avatar billede haolan Nybegynder
09. januar 2006 - 22:24 Der er 27 kommentarer og
1 løsning

Sti til linket i kat.php

Halløj eksperter

Jeg har efter en masser knuder og mas måttet opgive at få lavet en ordentlig sti fremviser til min kategorifil på vivaa.dk.

Meningen er at den skal vise stien til kategorien fx:

Her er du: EDB & Internet - Computerspil - Onlinespil

Hvordan får man lavet det?

Det største problem i dette er at en kategori godt kan have flere placeringer fx ligger kategorien internetreklame både under kategorien internet og kategorien reklame.

Min stifremviser skal bare vise den vej brugeren har valgt.
Det må jo kunne gøres med nogle Sessioner, men min hjerne vil ikk rigtig udtænke det :)
Avatar billede showsource Seniormester
09. januar 2006 - 22:30 #1
Kan du ikke bruge hvad der står i adresselinien?
Avatar billede haolan Nybegynder
09. januar 2006 - 22:33 #2
jo men den kalder jo kun et id på den pågældne menu.. Den skal jo så at sige slæbe undermenuerne med sig, så de bliver kaldt frem løbende jo længere man bevæger sig ind på siden.
Avatar billede delphinarious Nybegynder
10. januar 2006 - 10:15 #3
Jeg havde nok valgt at lavet sitet, sådan at stien i adresselinien svarede til den egentlige dybde.

Enten med id's:

http://www.vivaa.dk/456/78/12/

Eller med navne:

http://www.vivaa.dk/edb_og_internet/computerspil/onlinespil/

Det kan laves med htaccess. :-)

Men når du nu har lavet det anderledes, så må du jo lave en funktion, der slår "moderen" til kategorien op, tilføjer den til en streng, og kalder sig selv med dennes id, indtil der ikke er flere "mødre". :-)
Avatar billede haolan Nybegynder
10. januar 2006 - 17:25 #4
Ja det er netop mit problem.. Jeg aner ikke hvordan jeg skal stille det op.
Avatar billede delphinarious Nybegynder
10. januar 2006 - 17:44 #5
Her lige et totalt utestet forsøg på en sådan funktion...

function findkats($kat) {
    global $sti;
    $sql = mysql_query("select * from kats where id = '$kat'");
    $row = mysql_fetch_assoc($sql);
    $mother = $row["mother"];
    $navn = $row["navn"];
    $sti = $row["navn"]." >> ".$sti;
    if($mother != 0) {
        findkats($mother)." >> ".$sti;
    }
}
Avatar billede delphinarious Nybegynder
10. januar 2006 - 17:45 #6
UPS, nej den duer ikke... Sådan her måske:

function findkats($kat) {
    global $sti;
    $sql = mysql_query("select * from kats where id = '$kat'");
    $row = mysql_fetch_assoc($sql);
    $mother = $row["mother"];
    $navn = $row["navn"];
    $sti .= $row["navn"];
    if($mother != 0) {
        findkats($mother);
    }
}

Aner ikk... Prøv det! :-D
Avatar billede haolan Nybegynder
10. januar 2006 - 17:57 #7
Tjaa.. men problemet er at en kategori godt kan have flere "mothers". Som jeg skrev i spørgsmålet:
fx ligger kategorien internetreklame både under kategorien internet og kategorien reklame.

Dvs. at både Internet og Reklame er mothers for kategorien Internetreklame..

De såkaldte mothers kaldes ud med navnene: ref, ref2 og ref3.
Avatar billede delphinarious Nybegynder
10. januar 2006 - 18:47 #8
Jamen, hvordan skal scriptet så vide, hvilken mother den skal bruge? Altså nok kan man meget med scripting, men logikken bag bliver altså nødt til at være på plads, før man kan scripte det... Hvordan skal systemet vide, ad hvilken vej man er kommet ned i den pågældende kategori?
Avatar billede haolan Nybegynder
10. januar 2006 - 19:57 #9
Jaa. det er jo problemet i mit spørgsmål.. Men ok, måske kan det gøres på din måde uden at virke forvirrende, så jeg prøver det lige af, så snart jeg har tid.

Foreløbig tak for dit forsøg :)
Avatar billede delphinarious Nybegynder
10. januar 2006 - 21:08 #10
Jow, men min måde virker jo kun så længe der kun er 1 mother til hver kategori... Det vil jo ikke løse dit problem. Men du kunne måske overveje at medføre stien ned til den valgte kategori i en querystring for sig selv? Det tror jeg, jeg ville vælge som løsning, hvis jeg var dig.. Altså f.eks:

kat.php?id=15&dir=70-55-20

Som ville fortælle at brugeren gik via kategori 70, 55 og 20 ned i kategori 15. Så er det bare at explode() denne streng ved "-", udskifte numre med navne fra databasen og eventuelle links, og vupti så er løsningen der. Ulempen ved dette vil være, at brugeren ved at ændre et enkelt tal i din querystring har mulighed for at lave rod i din "stifinder".. Men så kan du selvfølgeligt lige lave chekcs af hvert tal.. :-)
Avatar billede haolan Nybegynder
10. januar 2006 - 21:17 #11
Hmm kunne du præcisere lidt med et kode eksempel? Har ikk helt styr på det med explode og det der.. :) metoden lyder god ihvertfald
Avatar billede delphinarious Nybegynder
11. januar 2006 - 08:24 #12
Jo, det kan jeg da. Altså, vi går ud fra at du har en url, der hedder kat.php?id=15&dir=70-55-20 oppe i adresselinien, ikke?

//Så henter du query'en:
$dir = $_GET["dir"];

//Eksploderer variablen til et array...
$dir = explode("-",$dir);

//Laver en counter og nulstiller den...
$c = 0;

//Kører løkke mens c er mindre end antallet af poster i array...
while($c < count($dir)) {
    //Laeg nummeret til variablen sti (indsæt evt. databasekald her)
    $sti .= $dir[$c]." - ";
    //Adder counteren med 1...
    $c++;
}

Og så er det bare at udskrive variablen sti...

Du kan jo så i array'et kald hver post i array'et op i databasen, og lægge navn og link til variablen sti, i stedet for blot nummeret...
Avatar billede haolan Nybegynder
11. januar 2006 - 09:12 #13
ahh najs.. så har jeg lært noget nyt :) kikker lige på det senere idag.. :)
Avatar billede haolan Nybegynder
11. januar 2006 - 12:47 #14
Hvordan får man egentlig div postet i adresse linien rigtigt?

har stillet koden op sådan:

<?
//Så henter du query'en:
$dir = $_GET["dir"];

//Eksploderer variablen til et array...
$dir = explode("-",$dir);

//Laver en counter og nulstiller den...
$c = 0;

//Kører løkke mens c er mindre end antallet af poster i array...
while($c < count($dir)) {
    //Laeg nummeret til variablen sti (indsæt evt. databasekald her)
    $select_sti = mysql_query("SELECT kat, id FROM kategori WHERE id = '$c'") or die(mysql_error());
    $sti .= $dir[$c]." - ";
    //Adder counteren med 1...
    $c++;
}
echo "$sti";

?>

Og koden til kategorierne er:

<?

# sql der henter kategorierne
$result = mysql_query("SELECT * FROM kategori WHERE kategori.ref = '".$_GET["id"]."' OR kategori.ref2 = '".$_GET["id"]."'OR kategori.ref3 = '".$_GET["id"]."' order by kat") or die(mysql_error());

echo "<table>";
$colums = 3;  # Antal kategorier pr række
$i = 0;
while ($r = mysql_fetch_array($result))
{
    if ($i % $colums == 0 && $i != 0)
    {
        echo "</tr>\n";
    }

    if ($i % $colums == 0)
    {
        echo "<tr>\n";
    }

    echo "<td width='250'><a href='kat.php?id=" . $r["id"] . "'>" . $r["kat"] . "</a>&nbsp;&nbsp;</td>\n";
    $i++;
}

while ($i % $colums != 0)
{
    echo "<td>&nbsp;</td>\n";
    $i++;
}

echo "</tr></table>";
?>
Avatar billede delphinarious Nybegynder
11. januar 2006 - 12:58 #15
Ah, skal jeg lave det HELE for dig? ;-)

Du kan starte med at ændre til dette, der hvor du udskriver kategori-linket:

//Hent gammel dir-vaerdi og laeg i var nydir, tillag den nuvaerende kategori.
$nydir = trim($_GET["dir"]."-".$_GET["kat"]);

//check strukturen
if(substr($nydir,0,1) == "-") {
    $nydir = substr($nydir,1);
}

if(substr($nydir,-1,1) == "-") {
    $nydir = substr($nydir,0,-1);
}

Og udskriv så, med variablen nydir som dir-vaerdi..

echo "<td width='250'><a href='kat.php?id=".$r["id"]."&dir=".$nydir."'>".$r["kat"]."</a>&nbsp;&nbsp;</td>\n";
Avatar billede haolan Nybegynder
11. januar 2006 - 14:01 #16
Hehe.. Det var sådan set ikk planen du skulle lave det hele, men var lige lidt lost i det kodning der :)

Den driller en anelse.. Kan ikke rigtig få den til at udskrive alle de tidligere kategorier.. Den udskriver kun kategorien før..

Fx går jeg ind under 3D-Grafik udskriver den kun Computergrafik, altså den går kun et skridt tilbage. Den skulle jo gerne skrive EDB & Internet - Computergrafik - 3D-Grafik, når man befinder sig der.

Den kode jeg har nu ser sådan ud:

<?
//Så henter du query'en:
$dir = $_GET["dir"];

//Eksploderer variablen til et array...
$dir = explode("-",$dir);

//Laver en counter og nulstiller den...
$c = 0;

//Kører løkke mens c er mindre end antallet af poster i array...
while($c < count($dir)) {
    //Laeg nummeret til variablen sti (indsæt evt. databasekald her)
    $select_path = mysql_query("SELECT kat, id FROM kategori WHERE id = '".$dir[$c]."'") or die(mysql_error());
    $path = mysql_fetch_array($select_path);
      $sti = $path['kat'];
    $sti .= " - ";
    //Adder counteren med 1...
    $c++;
}
echo "$sti";

?>
Avatar billede haolan Nybegynder
11. januar 2006 - 14:01 #17
Har lagt det op på siden så du kan se det. http://www.vivaa.dk/kat.php?id=1  <-- prøv så at navigere lidt rundt
Avatar billede delphinarious Nybegynder
11. januar 2006 - 14:11 #18
Yes. Det ser da ud til at fungere ok?
Avatar billede delphinarious Nybegynder
11. januar 2006 - 14:13 #19
Nåh.. he-he.. havde ikke lige set kommentaren før den med linket.. he-he...

Forklar mig lige, hvor på siden jeg skal kigge efter "stien"? I URL'en virker det da i alt fald helt efter hensigten. :-)
Avatar billede delphinarious Nybegynder
11. januar 2006 - 14:18 #20
Nåh-he-he.. Nu tror jeg, jeg er med. :-)

Jeg det skyldes denne:

$sti = $path['kat'];
$sti .= " - ";

Prøv at ændre til:

$sti .= $path['kat'];
$sti .= " - ";

Når du ikke indsætter et punktum før = overskriver du jo variablen. :-)
Avatar billede haolan Nybegynder
11. januar 2006 - 16:12 #21
Ahh najs.. så virker det.. Læg svar for points..

Takker for hjælpen..
Du kan gå på vivaa.dk, hvis du vil overvære resultatet af dit arbejde :)
Avatar billede delphinarious Nybegynder
11. januar 2006 - 16:48 #22
Jamen, så smider jeg et svar. :-)

Det ser jo ud til at virke fint på vivaa.dk. Du skal bare lige huske at få dir-parametrene med på dine links i stien også.. Ellers kan den kun bruges 1 gang. ;-)

God fornøjelse med det.
Avatar billede haolan Nybegynder
11. januar 2006 - 17:41 #23
ahh ja.. hvordan får man den til kun at medtage de parametre der skal bruges mon?
Avatar billede delphinarious Nybegynder
12. januar 2006 - 08:31 #24
Hvis du lige poster array'et som du bruger det nu (hvor der også er kommet links på), så skal jeg vise dig det. ;-)

Tak for points!
Avatar billede haolan Nybegynder
12. januar 2006 - 09:13 #25
while($c < count($dir)) {
    //Laeg nummeret til variablen sti (indsæt evt. databasekald her)
    $select_path = mysql_query("SELECT kat, id FROM kategori WHERE id = '".$dir[$c]."'") or die(mysql_error());
    $path = mysql_fetch_array($select_path);
    $pathid = $path['id'];
    $sti .= "<a href='kat.php?id=$pathid'>";
    $sti .= $path['kat'];
    $sti .= "</a>";
    $sti .= " - ";
    //Adder counteren med 1...
    $c++;
}
Avatar billede delphinarious Nybegynder
12. januar 2006 - 09:42 #26
Ok. Her lige en IKKE-TESTET rettelse... Prøv det lige, og lad mig se resultatet... Hvis den er helt gal, skal den nemlig bare vendes om. :-)

while($c < count($dir)) {

    $q = $c;
    while($q >= 0) {
        if(is_numeric($dir[$q]) && $q != $c) {
            $heltnydir = $heltnydir."-".$dir[$q];
        }
        $q--;
    }

    if(substr($heltnydir,0,1) == "-") {
        $heltnydir = substr($heltnydir,1);
    }

    if(substr($heltnydir,-1,1) == "-") {
        $heltnydir = substr($heltnydir,0,-1);
    }

    //Laeg nummeret til variablen sti (indsæt evt. databasekald her)
    $select_path = mysql_query("SELECT kat, id FROM kategori WHERE id = '".$dir[$c]."'") or die(mysql_error());
    $path = mysql_fetch_array($select_path);
    $pathid = $path['id'];
    $sti .= "<a href='kat.php?id=".$pathid."&dir=".$heltnydir."'>";
    $sti .= $path['kat'];
    $sti .= "</a>";
    $sti .= " - ";
    //Adder counteren med 1...
    $c++;
}
Avatar billede haolan Nybegynder
12. januar 2006 - 22:09 #27
Ahh.. hele stien forsvinder nu... Du kan se det på siden nu..
Avatar billede haolan Nybegynder
18. januar 2006 - 22:13 #28
Halløj.. hvad er det der skal vendes om, som du skrev?
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