Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Webprogrammeren & scripting

[php] style switcher

None
12 antwoorden
  • http://members.lycos.nl/djamn/juliussteiner/index.php

    Dat is de uri waar het probleem om gaat.

    Op de site wordt de mogelijkheid aangeboden te kiezen tussen twee verschillende stijlbladen, eentje met grote letters en eentje met kleine letters.

    Het is de bedoeling dat als je op een link klikt (groot, klein) dat dan het andere stijlblad erinkomt en dat dit eventueel wordt opgeslagen in een cookie. Misschien is het zelfs ook genoeg om het gewoon te kunnen veranderen voor een eenmalig bezoek.

    Ik zou graag willen dat op elke pagina waar iemand komt hij de lettergrootte makkelijk kan veranderen, zonder dat hij terug wordt gestuurd naar home.

    Hieronder plaats ik even de code die ik nu heb.

    [b:9b9ef2e2d9]index.php[/b:9b9ef2e2d9][code:1:9b9ef2e2d9]<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="nl">
    <!– resultaten van het testen met browsers kunt u vinden op http://members.lycos.nl/djamn/juliussteiner/index.php?id=8 –>
    <!– ie5.0 bug gemaakt met uitzondering van het attribuut border bij de hyperlinks –>
    <head>

    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <?php
    if($id == ""){$title = home;}
    elseif($id == 2){$title = biografie;}
    elseif($id == 3){$title = werk;}
    elseif($id == 4){$title = links;}
    elseif($id == 5){$title = contact;}
    else{$title = disclaimer;}
    ?>

    <title>julius steiner | <?php echo("$title"); ?></title>

    <link rel="stylesheet" href="<?php if(isset($_COOKIE['sitestyle'])){print trim($_COOKIE['sitestyle']);}else{print "css/base";}?>.css" />
    <link rel="stylesheet" type="text/css" href="css/form.css" />

    </head>
    <body>

    <div id="center">

    <div id="logo"></div><!– eigenlijk mag het niet als iemand een betere oplossing heeft die werkt, mail plz –>

    <div id="content">

    <div class="nav" id="navinhoud">

    <a accesskey="h" href="index.php"<?php if($id == ""){ echo(' id="current"');} ?>>home</a>
    <a accesskey="b" href="index.php?id=2"<?php if($id == 2){ echo(' id="current"');} ?>>biografie</a>
    <a accesskey="w" href="index.php?id=3"<?php if($id == 3){ echo(' id="current"');} ?>>werk</a>
    <a accesskey="l" href="index.php?id=4"<?php if($id == 4){ echo(' id="current"');} ?>>links</a>
    <a accesskey="c" href="index.php?id=5"<?php if($id == 5){ echo(' id="current"');} ?>>contact</a>

    </div>

    <?php
    switch($id){
    case "2": $file="biografie";break;
    case "3": $file="werk";break;
    case "4": $file="links";break;
    case "5": $file="contact";break;
    case "6": $file="disclaimer";break;
    case "7": $file="sitemap";break;
    case "8": $file="browsersupport";break;
    default : $file="home";
    }
    include("content/{$file}.php");
    ?>

    <div class="nav" id="navalgemeen">
    <a accesskey="d" href="index.php?id=6"<?php if($id == 6){ echo(' id="current"');} ?>>disclaimer</a>
    <a acceskey="k" href="switcher.php?set=css/base&ref=index.php?id=<?php print $_GET['id'] ?>">klein</a>
    <a acceskey="g" href="switcher.php?set=css/basebigger&ref=index.php?id=<?php print $_GET['id'] ?>">groot</a>
    <a accesskey="s" href="index.php?id=7"<?php if($id == 7){ echo(' id="current"');} ?>>sitemap</a>

    </div>
    </div>
    </div>

    </body>
    </html>[/code:1:9b9ef2e2d9][b:9b9ef2e2d9]switcher.php[/b:9b9ef2e2d9][code:1:9b9ef2e2d9]<?php
    // This array lists the "acceptable" styles
    $accept = array('css/base','css/basebigger');

    // Get style from a query string (e.g. from a link),
    // or from a form.
    if(isset($_REQUEST['set'])){
    $style = trim(strip_tags($_REQUEST['set']));
    }
    else if(isset($_POST['set'])){
    $style = trim(strip_tags($_POST['set']));
    }
    else {
    // Unknown request
    $style = false;
    }

    // Check if the requested stylesheet is "acceptable"
    if(($style !== false) && (in_array($style, $accept))){
    setcookie("sitestyle", $style, time()+31536000, '/', 'http://www.lycos.nl/', '0');
    }
    if(isset($_REQUEST['ref']) || (isset($_POST['ref']))){
    if(isset($_REQUEST['ref'])){
    $ref = $_REQUEST['ref'];
    }
    header("Location: $ref");
    exit;
    }
    else if(isset($_SERVER['HTTP_REFERER'])){
    // Send the user back to the refering page
    header("Location: ". $_SERVER['HTTP_REFERER']);
    exit;
    }
    else {
    // No HTTP referrer, send them back to the home page
    header("Location: http://members.lycos.nl/djamn/juliussteiner/index.php");
    exit;
    }
    ?>[/code:1:9b9ef2e2d9]Ik hoop dat ik het zo duidelijk heb uitgelegd.

    -termin8or
  • Als ik de opbouw van je site een beetje door heb dan heeft het niet zoveel zin om in de link naar de styleswitcher de PHP_SELF mee te sturen aangezien deze altijd gelijk zal zijn. Zinvoller is het dus om de id mee te sturen zoals je ook doet in de linkjes in je navigatiebalk.

    De redirectheader is dan gewoon naar index.php?id=XX.

    Verder zie ik in je code (na een snelle scan) wat slordigheden:
    [list:5cdd8027a4]
    [*:5cdd8027a4]Het 5e argument van setcookie is een [i:5cdd8027a4]domain[/i:5cdd8027a4]. En dat is dus geen volledige URI (meer info bijvoorbeeld hier)
    [*:5cdd8027a4]Bij de check of de [i:5cdd8027a4]ref[/i:5cdd8027a4] is meegegeven in de querystring controleer je zowel de $_REQUEST als de $_POST superglobals. De $_REQUEST is voldoende aangezien deze ook de $_POST omvat (tenzij je dit in de configuratie van PHP hebt aangepast). Waarschijnlijk bedoel je $_GET en $_POST.
    [/list:u:5cdd8027a4]

    Overigens heb je helemaal geen styleswitcher script nodig. De functionaliteit kan ook ingebouwd worden in de pagina's zelf. Bij aanroep van de pagina controleer je of er een keuze is gemaakt voor een style. Zo ja, dan zet je een koekje weg en voeg je de stylesheet in. Zo niet, controleer of er een cookie bestaat en gebruik de waarde daaruit, bij geen cookie gebruik je de default waarde.
  • Bedankt voor je snelle reactie.

    Ik heb er naar gekeken wat je allemaal zei, maar veel dingen zijn mij nog niet geheel helder aangezien ik niet zo erg sterk ben in php. De dingetjes met de hyperlinks en de bestandjes includen vond ik niet zo heel moeilijk om zelf te doen, maar dit script heb ik geleend en geleerd van twee site:[list:f582b2ebc4][*:f582b2ebc4]http://www.contrastsweb.com/switcher/
    [*:f582b2ebc4]http://www.alistapart.com/stories/phpswitch/[/list:u:f582b2ebc4]
    [quote:f582b2ebc4="Annie"]De redirectheader is dan gewoon naar index.php?id=XX.[/quote:f582b2ebc4]Dit heb ik geprobeerd en ook boven in de code aangepast (en upgeload) ik heb alleen nog niet het gevoel dat het werkt.[quote:f582b2ebc4]Het 5e argument van setcookie is een [i:f582b2ebc4]domain[/i:f582b2ebc4]. En dat is dus geen volledige URI[/quote:f582b2ebc4]Klopt dat nu wel?[quote:f582b2ebc4]De $_REQUEST is voldoende aangezien deze ook de $_POST omvat[/quote:f582b2ebc4]die heb ik nu weggehaald.[quote:f582b2ebc4]Overigens heb je helemaal geen styleswitcher script nodig. De functionaliteit kan ook ingebouwd worden in de pagina's zelf. Bij aanroep van de pagina controleer je of er een keuze is gemaakt voor een style. Zo ja, dan zet je een koekje weg en voeg je de stylesheet in. Zo niet, controleer of er een cookie bestaat en gebruik de waarde daaruit, bij geen cookie gebruik je de default waarde.[/quote:f582b2ebc4]Graag zou ik willen weten hoe je zoiets doet of waar ik hier meer informatie over kan vinden. Ik heb namelijk wel een keer zoiets gevonden. Het enige probleem was dat die werkte op een session id en ik daardoor validatie problemen kreeg bij het w3.

    -termin8or
  • Even los van je probleem: als je echo() of print() gebruikt is het verstandiger om variabelen buiten de quotes te halen, aangezien dit de performance nogal ten goede komt. Met dank aan Bill: klik!

    - Bas
  • lycos is down, maar na veel moeite heb ik een nieuwe host gevonden voor de laatste week dat ik nog niet ga betalen: . deze host is trouwens erg traag met ftp. De code heb ik radicaal veranderd aan de hand van een ander ala-artikel wat me handiger leek, er zitten nu alleen nog wel de nodige sucurity bugs in die ik er ga uithalen, maar hij doet het wel.

    [b:75c0daeb83]index.php[/b:75c0daeb83][code:1:75c0daeb83]<?php
    if ($stylecookie == "") {
    $css="base";
    }
    else {
    $css=$stylecookie;
    }
    Header ("Location:http://djamn.coolfreepages.com/site.php?page=home&css=$css");
    ?>[/code:1:75c0daeb83][b:75c0daeb83]site.php[/b:75c0daeb83][code:1:75c0daeb83]<?php
    setcookie ("stylecookie", $css, time()+40000000);
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="nl">
    <!– resultaten van het testen met browsers kunt u vinden op http://djamn.coolfreepages.com/site.php?page=browsersupport&css=base –>
    <!– ie5.0 bug gemaakt met uitzondering van het attribuut border bij de hyperlinks –>
    <head>

    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

    <title>julius steiner | <?php echo("$page"); ?></title>

    <link rel="stylesheet" type="text/css" href="css/<?php echo("$css") ?>.css" media="screen" />
    <link rel="stylesheet" type="text/css" href="css/baseprint.css" media="print" />

    <link rel="stylesheet" type="text/css" href="css/form.css" media="screen" />

    </head>
    <body>

    <div id="center">

    <div id="logo">

    <img src="images/logo/pasfoto.jpg" alt="Julius Steiner" title="Julius Steiner" height="78" width="58" id="pasfoto" />

    </div>

    <div id="content">

    <div class="nav" id="navinhoud">
    <a accesskey="h" href="site.php?page=home&css=<?php echo("$css") ?>"<?php if($page == "home"){ echo(' id="current"');} ?>>home</a>
    <a accesskey="b" href="site.php?page=biografie&css=<?php echo("$css") ?>"<?php if($page == "biografie"){ echo(' id="current"');} ?>>biografie</a>
    <a accesskey="w" href="site.php?page=werk&css=<?php echo("$css") ?>"<?php if($page == "werk"){ echo(' id="current"');} ?>>werk</a>
    <a accesskey="l" href="site.php?page=links&css=<?php echo("$css") ?>"<?php if($page == "links"){ echo(' id="current"');} ?>>links</a>
    <a accesskey="c" href="site.php?page=contact&css=<?php echo("$css") ?>"<?php if($page == "contact"){ echo(' id="current"');} ?>>contact</a>

    </div>

    <?php include("content/$page.php"); ?>

    <div class="nav" id="navalgemeen">
    <a accesskey="d" href="site.php?page=disclaimer&css=<?php echo("$css") ?>"<?php if($page == "disclaimer"){ echo(' id="current"');} ?>>disclaimer</a>
    <a accesskey="k" href="site.php?page=<?php echo("$page") ?>&css=base">klein</a>
    <a accesskey="g" href="site.php?page=<?php echo("$page") ?>&css=basebigger">groot</a>
    <a accesskey="s" href="site.php?page=sitemap&css=<?php echo("$css") ?>"<?php if($page == "sitemap"){ echo(' id="current"');} ?>>sitemap</a>

    </div>
    </div>
    </div>

    </body>
    </html>[/code:1:75c0daeb83]

    ik geloof dat het nu werkt, ik ga dit weekend hem nog even aanpassen. sucurity bugs fixen, maar als iemand nog suggesties heeft graag.[quote:75c0daeb83="Bas"]Even los van je probleem: als je echo() of print() gebruikt is het verstandiger om variabelen buiten de quotes te halen, aangezien dit de performance nogal ten goede komt.[/quote:75c0daeb83]dus zonder ( en ) maar met " ?

    -termin8or
  • [quote:5df06c9948="termin8or"]dus zonder ( en ) maar met " ?[/quote:5df06c9948]Nee, het volgende [code:1:5df06c9948]$naam1 = "BasHamar";
    $naam2 = "termin8or";

    echo "Mijn naam is $naam1 en ik reageer op $naam2"; // Traag, niet zo doen…
    echo "Mijn naam is ".$naam1." en ik reageer op ".$naam2; // … maar zo.

    /*
    * Het maakt niet uit of je echo() of print() gebruikt, en de haakjes () mogen, maar hoeven niet.
    */[/code:1:5df06c9948]- Bas
  • hier alsnog de uri http://djamn.coolfreepages.com/, bas bedankt, ik zal is kijken wat ik ermee kan (ik bedoel : ik zal is kijken of dit ik dit ooit ga snappen ;))

    -termin8or
  • [code:1:0b739f693d]echo "Mijn naam is ", $naam1, " en ik reageer op ", $naam2; // … en dit is nog beter.
    [/code:1:0b739f693d]
  • waar zou ik deze technieken kunnen toepassen in mijn code?

    -termin8or
  • Moet het trouwens perse in php? Ik zie namelijk ook regelmatig javascript style switchers. Hoef je de pagina ook niet steeds opnieuw te laten downloaden.
  • In NS/Moz kan je ook in de browser zelf kiezen voor een stylesheet (View >> Use Style) als je deze opgeeft in de html, bijv:
    [code:1:42ecf597b6]
    <link rel="alternate stylesheet" title="naampie" href="style2.css" type="text/css" media="screen" />
    [/code:1:42ecf597b6]
    Weet zo even niet hoe de ondersteuning in andere browsers is.
  • De style switcher staat in php, omdat 10% van de internetters javascript uit heeft staan.

    @annie dat heb ik tevens aangemaakt, maar dat werkt dus niet in ie6, dus dat is wat handiger voor netscape gebruikers.

    -termin8or

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.