Ich   Entwicklung   Lösungen Apache PHP mySQL  
 

StyleSwitching mit PHP

Dieser Artikel zeigt eine Lösung für sogenanntes Style Switching auf, d.h. das Anbieten verschiedener Cascading Style Sheets, auf denen sich der Besucher einer Webseite einen Style aussuchen kann.

Viele vorhandene Lösungen sind von Webdesignern entwickelt und basieren entweder auf JavaScript oder auf mangelhaftem PHP. Die Nachteile von JavaScript-Lösungen sind offensichtlich, doch auch im Internet findbare Lösungen wie auf http://www.perun.net/archiv/2004/01/23/php-styleswitcher/ haben einige Schwächen, die ich hier versuche auszumerzen.

So wird die Auswahl während eines Besuches einer Webseite in der Session gespeichert, bei aktivierten Cookies aber auch dauerhaft auf dem Client-Rechner. Der folgende PHP-Code erzeugt, anders als bei verbreiteten Lösungen, keine Warnungen oder Fehler bei bestimmten PHP-Konfigurationen, sondern ist universell einsetzbar.

Kern der Lösung ist der folgende Abschnitt, der die zu nutzende CSS-Datei festlegt:


<?php
if(empty($STYLEREQUEST["style"])) {
    if(empty($_SESSION["style"])) {
        if(isset($_COOKIE["stylesheet"])) {
            $_SESSION["style"] = $_COOKIE["stylesheet"];
        } else {
            $_SESSION["style"] = $stylefile[0];
        }
    }
} else {
    if(!in_array($STYLEREQUEST["style"], $stylefile)) {
        $STYLEREQUEST["style"] = $stylefile[0];
    }
    setcookie("stylesheet", $STYLEREQUEST["style"], time() + 3600 * 24 * 365, "/");
    $_SESSION["style"] = $STYLEREQUEST["style"];
}
?>

Dabei entspricht $STYLEREQUEST entweder $_POST oder $_GET, je nach Einstellung (das Skript lässt sich so konfigurieren, dass der StyleSwitch entweder nur per GET oder eben per POST funktioniert). $stylefile ist ein Array mit den möglichen CSS-Dateinamen, wobei hier der erste Eintrag im Array der default-Wert ist.

Wenn per GET bzw. POST die Variable style übergeben wird (zweiter Teil der if-Verzweigung), wird ein Cookie gesetzt und der neue Style in die Session gespeichert.
Wird keine Variable übergeben und ist noch kein Wert in der Session gespeichert, wird der Wert wenn vorhanden aus dem Cookie gelesen, sonst wird der default-Wert festgelegt.

Im head der HTML-Datei wird nun die zu benutzende CSS-Datei festgelegt:


<?php
for($i = 0; $i < count($stylefile); $i++) {
    if($stylefile[$i] == $_SESSION["style"]) {
        echo '<link rel="stylesheet" href="/'.$stylefile[$i].'.css"';
        echo ' type="text/css" title="'.$stylefile[$i].'" media="screen" />';
    } else {
        echo '<link rel="alternate stylesheet" href="/'.$stylefile[$i].'.css"';
        echo ' type="text/css" title="'.$stylefile[$i].'" media="screen" />';
    }
}
?>

Die anderen Styles werden als alternate stylesheet in den Kopf geschrieben, sodass einige Browser (wie Firefox bzw. Mozilla) das Umschalten des Styles auch über das Menü des Browsers unterstützen können.

Skript ausprobieren / Quelltext des Skriptes ansehen


Das Syntax-Highlighting der Codebeispiele wurde mit QFormat erreicht.

URL: www.intermitto.net/loesungen/artikel/styleswitch/
© 2004-05 Jens Becker - intermitto.net v5.1
Letzte Änderung: 23.08.2005

Home - Kontaktformular - Downloads - Suche und Sitemap - Impressum
Entwicklung - Problemlösungen - Tutorials: Apache PHP mySQL

user  pass