Stylesheet austauschen ohne JavaScript

  • Auf der Suche nach einem Styleswitcher, der auch bei ausgeschaltetem JavaScript funktioniert, bin ich auf dieses gestoßen, aber irgendwie will das nicht so richtig klappen.
    Ich habe eine Datei switcher.php mit dem Inhalt

    PHP
    <?php
    setcookie ('sitestyle', $set, time()+31536000, '/', 'localhost/test', '0');
    header("Location: $HTTP_REFERER");
    ?>


    erstellt und diese im Themes-Verzeichnis abgespeichert. (Und testweise auch an anderen Stellen, das ändert aber auch nichts.) In dem Verzeichnis sind auch die zwei Stylesheets style.css und theme2.css.
    In der header.php habe ich den bisherigen Link zum Stylesheet ersetzt durch

    PHP
    <link rel="stylesheet" type="text/css" media="screen" title="Standard" href="http://localhost/test/wp-content/themes/testtheme/<?php echo (!$sitestyle)?'style':$sitestyle ?>.css" />
    <link rel="alternate stylesheet" type="text/css" media="screen" title="Style 2" href="http://localhost/test/wp-content/themes/testtheme/style2.css" />


    und in der Sidebar stehen die Links

    Code
    <li><a href="http://localhost/test/wp-content/themes/testtheme/switcher.php?set=style">Standard</a></li>
    <li><a href="http://localhost/test/wp-content/themes/testtheme/switcher.php?set=style2">Style 2</a></li>


    Es tut sich aber leider nichts, wenn ich auf Standard oder Style2 klicke. Wenn ich im Firefox unter Ansicht -> Webseitenstil zwischen den Stylesheets wechsele, funktioniert es.
    Kann mir jemand sagen, wo mein Fehler liegt? :-|

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • Wahrscheinlich, weil register_globals=off ist. Bei setcookie einfach das $set durch $_GET['set'] ersetzen.

    Gruß
    Ingo

    Wenn ich helfen konnte, bitte [ Gefällt mir ] klicken. :-)

  • Ähmmm ja, habe wieder die Hälfte vergessen. Im zweiten Teil gibt es ja dasselbe Problem, also da muß dann anstelle von $sitestyle entsprechend $_COOKIE['sitestyle'] verwendet werden.

    Gruß
    Ingo

    Wenn ich helfen konnte, bitte [ Gefällt mir ] klicken. :-)

  • Du meinst hier?:

    PHP
    <link rel="stylesheet" type="text/css" media="screen" title="Standard" href="http://localhost/test/wp-content/themes/testtheme/<?php echo (![COLOR="Red"]$sitestyle[/COLOR])?'style':[COLOR="Red"]$sitestyle[/COLOR] ?>.css" />
    <link rel="alternate stylesheet" type="text/css" media="screen" title="Style 2" href="http://localhost/test/wp-content/themes/testtheme/style2.css" />


    Nein. Tut sich nix. :cry:

  • Blödes register_globals=on :-)
    Man bedenke auch, daß der von Dir verlinkte Artikel aus 2002 ist. Damals hatte man sich ob der Sicherheitsprobleme mit register_globals=on noch keine großen Gedanken gemacht.
    Also die switcher.php sollte so aussehen:

    PHP
    <?php
    setcookie( 'sitestyle', $_GET['set'], time()+31536000, '/' );
    header( "Location: {$_SERVER['HTTP_REFERER']}" );
    ?>

    Im header.php habe ich folgende Zeile:

    PHP
    <link rel="stylesheet" href="<?php bloginfo('template_url');?>/<?php echo (!$_COOKIE['sitestyle'])?'style':$_COOKIE['sitestyle']; ?>.css" type="text/css" media="screen,print" />

    So funktioniert es bei mir.

    Gruß
    Ingo

    Wenn ich helfen konnte, bitte [ Gefällt mir ] klicken. :-)

  • Lieber Ingo,
    also ich könnte dich knutschen :-D :-D :-D Du kannst dir nicht vorstellen, wie lange ich schon mit diversen Styleswitcher-Versionen herumprobiert habe, und jetzt funktioniert es endlich dank deiner Hilfe! Du hast das eine oder andere Bier bei mir gut! Mindestens!! :-D

  • Stimmt, dann könnte man z.B. einfach auf die Startseite weiterleiten, z.B. so:

    PHP
    <?php
    setcookie( 'sitestyle', $_GET['set'], time()+31536000, '/' );
    if( $_SERVER['HTTP_REFERER'] )
      $redirect = $_SERVER['HTTP_REFERER'];
    else
      $redirect = "/";
    header( "Location: $redirect" );
    ?>

    Gruß
    Ingo

    Wenn ich helfen konnte, bitte [ Gefällt mir ] klicken. :-)

  • Naja, der "Trick" besteht ja darin, den Nutzer wieder auf die Seite umzuleiten, auf der er den Switcher angeklickt hat. Dazu wird die Servervariable 'HTTP_REFERER' verwendet. Wenn diese aber leer ist (wird ausgefiltert oder Link wurde direkt aufgerufen), klappt das nicht, so das es sinnvoll ist, dann eine Weiterleitung auf die Startseite vorzunehmen.

    Gruß
    Ingo

    Wenn ich helfen konnte, bitte [ Gefällt mir ] klicken. :-)

  • Default schicken die Browser ja einen Referrer, kann aber deaktiviert werden oder durch Proxi und was weiß ich unterdrückt werden. Indem du die switcher.php aufrufst verlässt du nun dein WP, dann schickst du den User per Location: zurück zu der Seite woher er kam, und das klappt dann natürlich nicht, der User bleibt auf switcher.php und guck mal was das ausgibt (nix).

    Diesen speziellen Fall hast du nun abgedeckt. Als Ergänzung ;)

  • Es gibt übrigens noch weiteres Verbesserungspotential.
    Falls das ausgewählte css-File nicht existiert, bekommt meine eine Seite angezeigt, die aussieht wie zu den Anfangszeiten des WWW. Also gewissermaßen plain-html. Also müßte man noch prüfen, ob die css-Datei existiert. Aber damit geht dann auch irgendwie die geniale Einfachheit der Lösung verloren :-)

    Gruß
    Ingo

    Wenn ich helfen konnte, bitte [ Gefällt mir ] klicken. :-)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!