Stefan: Mit PHP alternatives StyleSheet laden (über Link)?

Hallo,

weiß jemand, wie ich mit PHP über einen Link ein alternatives StyleSheet laden kann?

Danke! :-)

Stefan

  1. Hi,

    mit PHP machst du das nicht, du kannst nur mittels PHP dem Browser sagen, dass er was anders machen soll:

    // Nehmen wir an du hättest ein Array mit .css-Dateinamen
    // und bekämst per Link (GET) eine Nummer
    $style[1]="style1.css";
    $style[2]="style2.css";
    $style[3]="style3.css";
    $usestyle = $_GET['usestyle'];

    echo "<link rel="stylesheet" type="text/css" href="".$style[$usestyle]."">";

    Ein Link sieht dann ungefähr so aus:
    <a href="meinskript.php?usestyle=2">Zu Layout 2 wechseln</a>
    <a href="meinskript.php?usestyle=3">Zu Layout 3 wechseln</a>

    --> Es fehlen natürlich Sicherheitsabfragen auf das Format von usestyle, die Initialisierung des Array usw. Aber die Grundidee müsste so sein...

    MfG
    Rouven

    --

    -------------------
    ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
    1. Hi Stefan,

      prinzipiell erzeugst Du mit PHP den Link zum Stylesheet und setzt das Ganze so zusammen, wie mein Vorgaenger das schon erklaert hat.

      Bei href="{STYLE}" kannst Du dann alles moegliche angeben, so z.B.

      • style_1.css
      • style_2.css
        oder aber auch:
      • style.php?style=1
      • style.php?style=2

      Das habe ich zumindest vor kurzem ausprobiert und mit IE gings. Sprich, das CSS ist eigentlich ein PHP-Script, dass gewisse anpassungen vornimmt, bevor das Stylesheet zurueck geliefert wird.
      Der Unterschied zwischen den Varianten ist, dass Du im ersten Fall tatsaechlich 2 Dateien haben musst, im zweiten Fall aber nur eine.

      Gruss, Eddie

      P.S.: hat das schon mal jemand mit anderen Browsern ausprobiert? Vielleicht muss man ja spezielle Header setzen, oder so?

      1. Moin!

        P.S.: hat das schon mal jemand mit anderen Browsern ausprobiert? Vielleicht muss man ja spezielle Header setzen, oder so?

        Ja, definitiv sollte man das tun. Ein Stylesheet wird als Content-Type "text/css" ausgeliefert. Der Webserver setzt diesen Content-Type aufgrund der Dateiendung ".css" gewöhnlich automatisch - PHP muß das explizit setzen, weil normal "text/html" ausgeliefert wird.

        Wenn der falsche Content-Type gesendet wird, können Browser das Stylesheet ignorieren - oder im Falle von Netscape 4 die Seitenanzeige gleich komplett verweigern.

        - Sven Rautenberg

        --
        ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|
        1. Hallo,

          Wenn der falsche Content-Type gesendet wird, können Browser das Stylesheet ignorieren - oder im Falle von Netscape 4 die Seitenanzeige gleich komplett verweigern.

          Kleine Ergaenzung (fuer's Archiv - Du, Sven, weisst es ja wohl schon):
          Auch Mozilla im Standards-Modus ignoriert Stylesheets,
          die mit falschem Content-Type ausgeliefert werden.
          http://mozilla.org/docs/web-developer/quirks/quirklist.html
          "Another often-noticed change is that, in standards mode,
          we reject CSS stylesheets that have a MIME type other than text/css."

          Gruesse,

          Thomas

    2. --> Es fehlen natürlich Sicherheitsabfragen auf das Format von usestyle, die Initialisierung des Array usw. Aber die Grundidee müsste so sein...

      MfG
      Rouven

      Hey, danke Rouven!

      Funktioniert! Ich verwende nun zwei CSS-Dateien, und mit den Links kann ich nun zwischen beiden hin und her wechseln.

      Das andere (s.o.) habe ich nicht gerafft. Bin halt Anfänger!

      Gruß,
      Stefan

      1. Hi,

        das was ich da noch gemeint habe ist mehr die "Grundsicherheit" die so ein Skript aufweisen sollte. Es könnte ja jemand in der Adressezeile einen total anderen Wert abschicken so nach dem Motto
        meinscript.php?stylenum=hierstehtwas
        Wenn du dann auf $style[$stylenum] zugreifst ist das natürlich ein Problem.
        Darum sollte man immer seine reinkommenden Parameter auf korrekte Formate prüfen, so mit
        is_numeric($stylenum)
        und im Anschluss noch, ob dieser Parameter überhaupt mit dem Array zusammenpasst (z.B. 2 Styles aber stylenum ist 999):
        ($stylenum < count($styles)) && ($stylenum >= 0)

        MfG
        Rouven

        --

        -------------------
        ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
  2. Hallo,
    sry, aber wie meinst du das???

    Evt. meinst du es so:

    <?php
    $datei = 'nav1.css';
    if(file_exists($datei))
    {
    <link rel="stylesheet" href="nav1.css" type="text/css">
    }
    else
    {
    <link rel="stylesheet" href="nav2.css" type="text/css">
    }
    ?>

    Erst wird überprüft ob es nav1.css gibt. Wenn es diese Datei gibt, wird die CSS Datei eingebunden, wenn es diese Datei nicht gibt, wird nav2.css eingebunden.

    MFG
    Andavos

    --
    http://www.rpgcommunity.de/clanwissen/index.php Webdesign, PHP, Clan-Aufbau und mehr