Avatar billede turbodk Nybegynder
01. november 2007 - 20:24 Der er 19 kommentarer og
1 løsning

Gem cookie med valgte CSS-fil.

Jeg er igang med at kode en hjemmeside, og tænkte om det er muligt at have sådan folk kan vælge hvilket stylesheet de vil bruge ud af flere, så man f.eks. kunne lave et i grønt tema, og et i rødt tema, måske et med arial som font, og et andet med verdana som font, så brugerne kan vælge hvad de bedst kan lide..

Hvordan gør man det?
Og hvordan laver man en cookie(eller noget andet der fungerer ligeså godt?) så den husker hvad man har valgt?
Avatar billede showsource Seniormester
01. november 2007 - 20:36 #1
Hvis man bare skal kunne gå ind på siden, og få vist stylesheet, så er cookie eneste mulighed.
Hvis man skal logge ind, kan du jo gemme det i en DB

En cookie sætter du FØR du laver noget output, mellemrum, liniskift og html-tags.
Og en cookie kan du først læse ved en reload af siden

http://dk.php.net/manual/da/function.setcookie.php
Avatar billede turbodk Nybegynder
01. november 2007 - 20:38 #2
Havde sådan set heller ikke regnet med der var andre muligheder, for det skal ikke være nødvendigt at logge ind :)

Men hvordan gør jeg sådan at man kan vælge stylesheet?
Avatar billede showsource Seniormester
01. november 2007 - 20:42 #3
Du kan jo lave en formular hvor man kan vælge style
og ved submit, sætter du cookie efter valgte
Avatar billede turbodk Nybegynder
01. november 2007 - 20:44 #4
Min idé var at der i toppen af siden var billeder, fungerende som knapper, det jeg til en start skal have lavet er et grønt og et rødt tema, så simpelthen bare have en henholdsvis grøn og rød firkant man kan trykke på og derpå vælger man sit stylesheet.

Men jeg har ingen idé om hvordan man kan ændre sådan en style i koden?
Avatar billede showsource Seniormester
01. november 2007 - 20:48 #5
<link rel="stylesheet" type="text/css" href="/<?php echo (isset($_COOKIE["style"]) ? $_COOKIE["style"] : "green"); ?>.css">

Du kan lave din knap til at gå til "saetstyle.php?style=red" og i saetstyle.php sætter du så cookien
Avatar billede supersquirrel Nybegynder
01. november 2007 - 20:52 #6
Du kan vel lave sådan noget med at du navngiver hvert tema på en måde, og disse sendes så videre til der hvor du henter din css side.

Så kan du lave ex.
<link href="<?=$detBrugerenValgte?>" rel="stylesheet" type="text/css">

så kan du vel lave sådan her med navnene fra "knappern":
<?php
if($_GET[tema] == "green"){
$detBrugerenValgte = "green.css";
}elseif($_GET[tema] == "red){
$detBrugerenValgte = "red.css";
}else{
$detBrugerenValgte = "defaultcss";
}
?>

Altså:
<?php
if($_GET[tema] == "green"){
$detBrugerenValgte = "green.css";
}elseif($_GET[tema] == "red){
$detBrugerenValgte = "red.css";
}else{
$detBrugerenValgte = "defaultcss";
}
?>
osv. osv. osv.
<link href="<?=$detBrugerenValgte?>" rel="stylesheet" type="text/css">
Avatar billede supersquirrel Nybegynder
01. november 2007 - 20:53 #7
Eller det showsource sagde.. :P
Glemte lige det med cookies
Avatar billede showsource Seniormester
01. november 2007 - 20:58 #8
Lidt at lege med:

<?php

$styles = array("green" => "Grønt tema", "red" => "Rødt tema");

if(isset($_GET["style"], $styles[$_GET["style"]])) {
    setcookie("style", $_GET["style"], (time()+7776000), "/"); // 90 dage
    header("Location:". $_SERVER["PHP_SELF"]);
    exit;
}

?>
<html><head><title>Style og cookie</title>

</head>
<body>

<?php

foreach($styles as $key => $value) {

echo"<a href=\"". $_SERVER["PHP_SELF"] ."?style=". $key ."\">". htmlentities($value) ."</a> ";

}


echo"<p>". (isset($_COOKIE["style"]) ? $_COOKIE["style"] : "Ikke sat");

?>



</body></html>
Avatar billede turbodk Nybegynder
02. november 2007 - 14:00 #9
Sry, men jeg forstår ikk: Hvor definerer jeg hvilken fil der hører til hvilket link?
Avatar billede turbodk Nybegynder
02. november 2007 - 20:51 #10
Og hvilken fil der skal være standard?
Avatar billede showsource Seniormester
03. november 2007 - 09:11 #11
ehh, i mit ex.
Har lavet to stylesheet's, green.css og red.css
green.css:
body {
    background-color: green;
    color: white;
    font-size: 1.0em;
    text-align: center;
    }

og red.css:
body {
    background-color: red;
    color: grey;
    font-size: 2.0em;
    }


Og selve php scriptet:
<?php
// et array med mulige valg for stylesheet
// nyt tilføjes som f.eks. "black" => "Sort"
$styles = array("green" => "Grønt", "red" => "Rødt");


// hvis der er klikket på et link til stylesheet
// og værdien af get style findes i $styles array'et

if(isset($_GET["style"], $styles[$_GET["style"]])) {
    // sætter cookie og den gælder fra roden af domain, "/"
    setcookie("style", $_GET["style"], (time()+7776000), "/"); // 90 dage
    // sender bruger tilbage til filen
    header("Location:". $_SERVER["PHP_SELF"]);
    exit;
}

?>
<html><head><title>Style og cookie</title>

<!-- er cookie style sat?, ellers brug rød tema -->
<link rel="stylesheet" type="text/css" href="<?php echo (isset($_COOKIE["style"]) ? $_COOKIE["style"] : "red"); ?>.css">

</head>
<body>

<?php
// laver et link til hver style
foreach($styles as $key => $value) {

echo"<a href=\"". $_SERVER["PHP_SELF"] ."?style=". $key ."\">". htmlentities($value) ." tema</a> ";

}

?>

</body></html>
Avatar billede turbodk Nybegynder
04. november 2007 - 15:17 #12
Fedt, det virker :D

Men hvis jeg trykker på et af linkene i index.php?side=Resultater, så går den automatisk tilbage til standard siden index.php?side=Forside, kan man gøre noget der?
Avatar billede showsource Seniormester
04. november 2007 - 21:01 #13
Der er flere muligheder, f.eks. sætte "&back=". $_SERVER["REQUEST_URI"] på linket.

echo"<a href=\"". $_SERVER["PHP_SELF"] ."?style=". $key ."&back=". $_SERVER["REQUEST_URI"]\">". htmlentities($value) ." tema</a> ";

og så bruge

if(isset($_GET["style"],$_GET["back"],$styles[$_GET["style"]])) {

og

    header("Location:". $_GET["back"]);
Avatar billede turbodk Nybegynder
04. november 2007 - 21:11 #14
Okay ser avanceret ud, tror bare jeg dropper det :P

Smid et svar, så får du dine points :)
Avatar billede showsource Seniormester
05. november 2007 - 06:47 #15
Ingen point, ellers tak.
Og ja, det kan se forvirrende ud hvis man ikke lige plejer at rode med php kode!
Og der var selvf. en fejl, i koden jeg pastede, manglende ." efter REQUEST_URI i linket

echo"<a href=\"". $_SERVER["PHP_SELF"] ."?style=". $key ."&back=". $_SERVER["REQUEST_URI"] ."\">". htmlentities($value) ." tema</a> ";

Prøver lige at lave det som en include, så det er lidt nemmere at gå til.
Avatar billede showsource Seniormester
05. november 2007 - 07:05 #16
<?php
// cookie_vaæg.php skal her ligge i samme mappe som denne fil
include("cookie_valg.php");
?>
<html><head><title>Style og cookie</title>

<!-- er cookie style sat, ellers brug rød tema -->
<link rel="stylesheet" type="text/css" href="<?php echo (isset($_COOKIE["style"]) ? $_COOKIE["style"] : "red"); ?>.css">

</head>
<body>

<?php

// laver lige nogle links til testbrug

for($i = 1; $i < 5; $i++) {
echo"<a href=\"". $_SERVER["PHP_SELF"] ."?page=". $i ."\">Side ". $i ."</a><br />\r\n";
}


echo"<p>";

// funktionen cookie_link() laves jo i cookie_valg.php
cookie_link();

?>

</body></html>

og cookie_valg.php:

<?php

// et array med mulige valg for stylesheet
// nyt tilføjes som f.eks. "black" => "Sort"
$styles = array("green" => "Grønt", "red" => "Rødt");


// hvis der er klikket på et link til stylesheet
// og værdien af get style findes i $styles array'et

if(isset($_GET["style"],$_GET["back"], $styles[$_GET["style"]])) {
    setcookie("style", $_GET["style"], (time()+7776000), "/"); // 90 dage
    header("Location:". $_GET["back"]);
    exit;
}

// funktion til at vise links til forskellige styles
function cookie_link($delop=" | ") {

// $delop kan jo så defineres ved funktionskald, f.eks. cookie_valg("br />");

// global er for at kunne bruge arrayet/værdien for $styles
global $styles;

// sidste værdi i arrayet styles
$last = end($styles);

    foreach($styles as $key => $value) {

    echo"<a href=\"". $_SERVER["PHP_SELF"] ."?style=". $key ."&back=". $_SERVER["REQUEST_URI"] ."\">". htmlentities($value) ." tema</a>";

        // hvis vi ikke er kommet til sidste værdi, echo $delop
        if($value != $last) {
        echo $delop;
        }

    }

}

?>
Avatar billede turbodk Nybegynder
05. november 2007 - 10:33 #17
Okay, tak :)

Jeg kigger på det senere når jeg er kommet hjem :)
Avatar billede turbodk Nybegynder
07. november 2007 - 17:11 #18
Argh jeg ka ikke få det til at passe ind på den måde jeg har sat mit op på, så det må jeg undvære :P

Sikker på du ikk vi have dine point? :)
Avatar billede showsource Seniormester
07. november 2007 - 22:29 #19
jaja, ingen point
Avatar billede turbodk Nybegynder
08. november 2007 - 09:11 #20
Nå ok, jamen så tager jeg dem selv :)
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