markus: stylesheet wechseln

Hallo, ich hab ein kleines Problem. Ich möchte auf meine Website einen Stylesheet Wechseler einbauen, der soll über einen Link aktiviert werden. Das ist (für mich) schon schwierig genug. Nur meine Website ist in Frames aufgebaut und der stylesheet wird dann nur für einen Frame geändert.

Ich habs auch schonmal mit php versucht das, wenn man auf den link klickt, der alte gelöscht wird und ein anderer mit anderen Eigenschaften erstellt wird. Das ging auch ganz gut nur is mir dann aufgefallen das alle anderen auf der Seite dann ja auch diesen stylesheet benutzen.

Wär toll wenn ihr mir helfen könntet. Danke schonmal.
Grüße Markus

  1. Hallo,

    es müsste über Cookies gehen, in dem Du im Cookie einen Wert für die gewählte Stylesheetdatei hinterlegst. Wenn der Benutzer ein anderes Style auswählt änderst Du den Cookie entsprechend und rufst die Seite neu auf.

    Bei dem Neuaufruf der Seite wird der aktualisierte Wert für die Stylesheet Datei aus dem Cookie gelesen und das Layout entsprechend dargestellt.

    Ich selber arbeite jedoch nicht mit Cookies und kann daher kein Beispiel liefern, ich hoffe es hilft Dir trotzdem.

    Gruß

    Slaughter

  2. Grüße,| Hallo, ich hab ein kleines Problem. Ich möchte auf meine Website einen Stylesheet Wechseler einbauen, der soll über einen Link aktiviert werden. Das ist (für mich) schon schwierig genug. Nur meine Website ist in Frames aufgebaut und der stylesheet wird dann nur für einen Frame geändert.

    Ich habs auch schonmal mit php versucht das, wenn man auf den link klickt, der alte gelöscht wird und ein anderer mit anderen Eigenschaften erstellt wird. Das ging auch ganz gut nur is mir dann aufgefallen das alle anderen auf der Seite dann ja auch diesen stylesheet benutzen.

    Wär toll wenn ihr mir helfen könntet. Danke schonmal.
    Grüße Markus

    OMG

    O M G

    O  M  G !!!?

    du kombinierst php mit frames? imho ist das ein verbrechen...

    aber wenn es shcon um css-wechsler geht - der hier ist nciht vollfunktionstüchtig aber : meinst du sowas? . das ist ein 08/15 fall für cookies oder $_SESSION - du hast einfach nur 2 (oder mehr)-css zu erstellen und je nach dem wert in cookies oder session wird dann dem besucher entsprechende css-verlinkung über ein switch "geechoed".

    für head-bereich:

      
    if ($_SESSION['css']=="1" OR !isset($_SESSION['css'])){  
    echo '<link rel="stylesheet" href="erstes.css">';  
    }elseif ($_SESSION['css']=="2") {  
    echo '<link rel="stylesheet" href="zweites.css">';  
    }  
    
    

    MFG
    bleicher

    --
    __________________________-
    Menschen an sich , sind nicht schlecht - es sind nur ihre Taten (c).
    Lieber bereuen gesündigt zu haben, als nicht sündigen und es später trotzdem bereuen.
    Boccaccio
    1. Hi, danke euch beiden ich werd es mal probieren.
      Aber was ist so schlimm daran php mit Frames zu compienieren?
      Grüße Markus

      1. Hallo nochmal,
        tut mir leid aber ich krieg das nicht hin ich hab in den head
        <?php
        if ($_SESSION['css']=="1" OR !isset($_SESSION['css'])){
        echo '<link rel="stylesheet" href="erstes.css">';
        }elseif ($_SESSION['css']=="2") {
        echo '<link rel="stylesheet" href="zweites.css">';
        }
        ?>
        geschrieben nur weiß ich nicht wie ich das wechseln soll per Link und auch das das meine anderen Seiten übernehmen.

        Viele Grüße markus

        1. Hallo

          <?php
          if ($_SESSION['css']=="1" OR !isset($_SESSION['css'])){
          echo '<link rel="stylesheet" href="erstes.css">';
          }elseif ($_SESSION['css']=="2") {
          echo '<link rel="stylesheet" href="zweites.css">';
          }
          ?>
          geschrieben nur weiß ich nicht wie ich das wechseln soll per Link und auch das das meine anderen Seiten übernehmen.

          Hast du überhaupt eine Session gestartet?

          Außerdem ist die Idee mit der Session nicht so das Wahre. Läuft sie ab, muss der Benutzer wieder das bevorzugte Stylesheet anwählen. Besser wäre die Verwendung eines Cookies.

          Lasse den Benutzer per Formular oder Link eines der Stylesheets auswählen. Das mit der Auswahl auszuführende Skript sendet dem Benutzer das Cookie und fügt das Linkelement in den Head ein. Dies muss mit der von Link oder Formular übermittelten Information erfolgen, da das Cookie erst beim nächten Seitenaufruf ausgelesen werden kann.

          Beim nächsten Aufruf wird dies vom Skript erledigt und mit der Information aus dem Cookie das richtige Stylesheet eingebunden.

          Tschö, Auge

          --
          Die deutschen Interessen werden am Liechtenstein verteidigt.
          Veranstaltungsdatenbank Vdb 0.2
          1. Hey,
            Danke Auge, so hab ich es mir eigentlich auch vorgestellt. Ich weiß nur nicht wie es umzusetzen ist.
            Das Problem ist ja weiterhin das meine Seite in Frames aufgebaut ist.
            Grüße Markus

            1. Hi,

              Das Problem ist ja weiterhin das meine Seite in Frames aufgebaut ist.

              Dann loese dieses Problem zu allererst (und zwar in Luft auf).

              Zu deiner Frage, was "schlimm" an "PHP und Frames" ist: Frames.
              Ihre zahlreichen Nachteile sind mehr als genug diskutiert worden (informiere dich bitte), und da du mit PHP eine serverseitige Technik zur Verfuegung hast, die dich problemlos ohne sie auskommen laesst, was die eigene "Bequemlichkeit" beim Erstellen und Pflegen von Dokumenten mit identischen Inhaltsbestandteilen (Menue, etc.) angeht, gibt es absolut keinen Grund, dieses anachronistische Konstrukt noch zu verwenden.

              </hilfe/faq.htm#quelltext-auslagern>
              http://tut.php-quake.net/frames.html

              MfG ChrisB

              1. Hi,

                gibt es absolut keinen Grund, dieses anachronistische Konstrukt noch zu verwenden.

                Gründe gibt es einige. Ob die für diese Website wirklich relevant sind, ist eine andere Frage.

                Gruß, Cybaer

                --
                Man kann doch sehr leicht jenen tugendhaften Menschen begegnen, (...) die eine Art "unkrümmbaren Zeigefinger" besitzen, der ständig den kalten Wind des Rechthabens ausströmt. (Wolfgang Huber, Bischof)
                Die Tugend jagt nicht den Teufel, sondern den Sündhaften. Damit wird sie zum Terror. (Hans-Ulrich Jörges, Journalist)
                1. Hallo,

                  Danke für die vielen vielen Antworten.

                  Ich werde meine Frames dann mal "auflösen".

                  Trotzdem hab ich weiterhin das Problem das ich weder weiß wie man den Stylesheet mit einem Link ändert, noch das die anderen Seiten dann den gewechselten Stylesheet verwenden.

                  Grüße Markus

                  1. Hi,

                    Trotzdem hab ich weiterhin das Problem das ich weder weiß wie man den Stylesheet mit einem Link ändert, noch das die anderen Seiten dann den gewechselten Stylesheet verwenden.

                    Prinzipiell so:

                    <a href="javascript:document.getElementById('IDdesLINK-Elements').href='/newsheet.css';">New Sheet</a>

                    Und den Namen des aktuellen Sheets als Cookie oder in top.name, dem Fensternamen (Zeichenmaskierung beachten!), sichern.

                    Gruß, Cybaer

                    --
                    Man kann doch sehr leicht jenen tugendhaften Menschen begegnen, (...) die eine Art "unkrümmbaren Zeigefinger" besitzen, der ständig den kalten Wind des Rechthabens ausströmt. (Wolfgang Huber, Bischof)
                    Die Tugend jagt nicht den Teufel, sondern den Sündhaften. Damit wird sie zum Terror. (Hans-Ulrich Jörges, Journalist)
                    1. Hallo,
                      Ich habe eine Frage, wenn ich das so machen würde wie hier Beschrieben:
                      http://coding.binon.net/dhtml/as_test.htm
                      Dort ändere ich ja eigentlich den stylesheet wenn ich das richtig verstehe. habe ich dann nicht das gleiche Problem das ich auch schon am Anfang hatte das jeder, also jeder Besucher, den gewechselten Stylesheet dann auch sieht?
                      Viele Grüße Markus

                      1. Hallo

                        Ich habe eine Frage, wenn ich das so machen würde wie hier Beschrieben:
                        http://coding.binon.net/dhtml/as_test.htm

                        Da du uns hier nur die Bedienungsanleitung verlinkt hast, bleibt mir nur die Wissenschaft von der Spekulation. Es handelt sich um JavaScript? Dann werden die Anpassungen im Browser, also beim einzelnen Benutzer, vorgenommen.

                        Dort ändere ich ja eigentlich den stylesheet wenn ich das richtig verstehe. habe ich dann nicht das gleiche Problem das ich auch schon am Anfang hatte das jeder, also jeder Besucher, den gewechselten Stylesheet dann auch sieht?

                        Was willst du denn nun? Willst du für deine Besucher einen Styleswitcher, oder, dass _du_ eine andere Ansicht hast, als die anderen Besucher der Seite?

                        Tschö, Auge

                        --
                        Die deutschen Interessen werden am Liechtenstein verteidigt.
                        Veranstaltungsdatenbank Vdb 0.2
                        1. Hi,
                          Ich hatte mir das so vorgestellt das, wenn man auf einen Link klickt, ein anderes Design geladen wird. Aber nur für den Benutzer der das neue Design ausgewählt hat.

                          Vorher hatte ich das große Problem das sobeld einer ein neues Design ausgewählt hat alle anderen auch eins bekommen haben. Das hatt dann zu ziemlichen Chaos geführt.

                          Ich habs jetzt so hinbekommen das der Stylesheet geändert wird nur das sofort wenn die Seite geladen wird. Und ich möchste das, wie gesagt, über einen Link steuern.

                          Ich weiß nicht ob es möglich ist aber ich würde (da ich gerne mehrere Design anlegen möchte) eine Function mit javascript erstellen die dann über einen Link activiert wird, und dann den Stylesheet ändert.

                          Grüße Markus

                          1. Hallo

                            Ich hatte mir das so vorgestellt das, wenn man auf einen Link klickt, ein anderes Design geladen wird. Aber nur für den Benutzer der das neue Design ausgewählt hat.

                            Vorher hatte ich das große Problem das sobeld einer ein neues Design ausgewählt hat alle anderen auch eins bekommen haben. Das hatt dann zu ziemlichen Chaos geführt.

                            Wieso das denn? JavaScript funktioniert lokal beim Benutzer und ein serverseitiger Wechsel (z.B. mittels PHP) mit Hilfe eines Cookies benutzt auch nur Infos des einzelnen Benutzers.

                            Tschö, Auge

                            --
                            Die deutschen Interessen werden am Liechtenstein verteidigt.
                            Veranstaltungsdatenbank Vdb 0.2
                            1. Hallo,
                              Ich will ja niemanden verärgern doch ich möchte eigentlich nicht darüber diskutierenob mein Vorhaben sinnvoll ist oder nicht, ich bräuchte nur Hilfe beim Syntax.
                              Grüße Markus

                              1. Hallo nochmal,

                                gibt es vielleicht die möglichkeit das ein Frame den Stylesheet der in einer php Seite erstellt wurde verwendet?

                                Grüße

                                1. Hi,

                                  gibt es vielleicht die möglichkeit das ein Frame den Stylesheet der in einer php Seite erstellt wurde verwendet?

                                  Ja, quer durch die Brust ins Auge. Mit JS geht ziemlich viel - solange man nicht auf fremde Seiten zugreifen will. :-)

                                  Kurzfassung (ohne Optimierung oder Überprüfungen):

                                  // Hole HTML-Markup vom 1. Sheet (cssRule() muß im "PHP-Frame" eingebunden sein)  
                                  styles=parent.frames["NameDesFrames"].[link:http://Coding.binon.net/cssRule@title=cssRule]("0/0","ownermarkup");  
                                  // Jetzt den HTML-Code ("<style ...>" & "</style>") entfernen  
                                  kannst selber machen :->  
                                  // CSS der aktuellen Seite hinzufügen  
                                  [link:http://Coding.binon.net/addStyle@title=addStyle](styles);  
                                  
                                  

                                  Gruß, Cybaer

                                  --
                                  Man kann doch sehr leicht jenen tugendhaften Menschen begegnen, (...) die eine Art "unkrümmbaren Zeigefinger" besitzen, der ständig den kalten Wind des Rechthabens ausströmt. (Wolfgang Huber, Bischof)
                                  Die Tugend jagt nicht den Teufel, sondern den Sündhaften. Damit wird sie zum Terror. (Hans-Ulrich Jörges, Journalist)
                                  1. Hi,

                                    Danke danke ich habs jetzt auch selbst hinbekommen nurn bisschen einfacher.

                                    Viele Grüße Markus

                          2. Hi,

                            Ich weiß nicht ob es möglich ist aber ich würde (da ich gerne mehrere Design anlegen möchte) eine Function mit javascript erstellen die dann über einen Link activiert wird, und dann den Stylesheet ändert.

                            Am einfachsten ist es, das wechselnde Design jeweils in eine eigenes, externes Stylesheet zu packen.

                            Verkürzt und ungetestet:

                            <title>Style wechseln</title>  
                            <link id="designSheet" href="standard.css" rel="stylesheet" type="text/css">  
                            <script type="text/javascript"><!--  
                            [code lang=javascript] // Gesicherten Sheetnamen aus top.name holen (alternativ: aus einem Cookie) und wiederherstellen  
                             actualSheet=unescape(top.name.replace("_"."%"));  
                             // Stylesheet aktivieren  
                             if(actualSheet) { document.getElementById("designSheet").href=actualSheet; }  
                              
                             function changeSheet(file) {  
                              document.getElementById("designSheet").href=file;  
                              // Gewünschten Dateinamen (mit Zeichenmaskierung) in top.name sichern  
                              top.name=escapeAll(file).replace("%","_");  
                             }  
                            
                            ~~~//--></script>  
                              
                            <button onclick="changeSheet('neu.css');">New Style</button>[/code]  
                              
                            Es fehlt noch [unescapeAll()](/archiv/2005/1/t99028/#m604376). Das ist notwendig, da in name nur Buchstaben, Ziffern und der Unterstrich erlaubte Zeichen sind (manche Browser sind da genau, manche fehlertolerant).  
                              
                              
                            Gruß, Cybaer  
                            
                            -- 
                            Man kann doch sehr leicht jenen tugendhaften Menschen begegnen, (...) die eine Art "unkrümmbaren Zeigefinger" besitzen, der ständig den kalten Wind des Rechthabens ausströmt. (Wolfgang Huber, Bischof)  
                              
                            Die Tugend jagt nicht den Teufel, sondern den Sündhaften. Damit wird sie zum Terror. (Hans-Ulrich Jörges, Journalist)
                            
                      2. Hi,

                        Dort ändere ich ja eigentlich den stylesheet wenn ich das richtig verstehe.

                        Nein. addStyle() fügt *neue* Regeln/Stylesheets *hinzu*!

                        Bestehende Regeln ändern kann man mit cssRule(). Aber dafür ist es nicht ausgelegt. Und auch nicht notwendig.

                        habe ich dann nicht das gleiche Problem das ich auch schon am Anfang hatte das jeder, also jeder Besucher, den gewechselten Stylesheet dann auch sieht?

                        Weder bei cssRule(), noch bei addStyle(), noch sonst. Styesheets werden vor dem BODY verarbeitet. Man muß nur dafür sorgen, daß auch das gewünschte verarbeitet wird.

                        Gruß, Cybaer

                        --
                        Man kann doch sehr leicht jenen tugendhaften Menschen begegnen, (...) die eine Art "unkrümmbaren Zeigefinger" besitzen, der ständig den kalten Wind des Rechthabens ausströmt. (Wolfgang Huber, Bischof)
                        Die Tugend jagt nicht den Teufel, sondern den Sündhaften. Damit wird sie zum Terror. (Hans-Ulrich Jörges, Journalist)
                  2. Hallo

                    Trotzdem hab ich weiterhin das Problem das ich weder weiß wie man den Stylesheet mit einem Link ändert,

                    Wie gesagt, lasse den Besucher sein bevorzugtes Stylesheet auswählen. Ob mit Link oder Formular ist erstmal egal. So oder so muss einem verarbeitenden Skript die Information über das gewählte Stylesheet zugeführt werden.

                    Dort wertest du diese Info aus und setzt beim Besucher ein Cookie mit dieser Information. Damit wäre der erste Schritt vollzogen.

                    Schritt 2 ist das Auslesen der Information auf _jeder_ Seite (womit sich deine zweite Frage beantworten sollte (s.u.) deiner Website. Dazu musst du nachschauen, ob dein Cookie beim Besucher vorhanden ist. Wenn nicht, wird die Seite mit dem Standardstylesheet ausgeliefert, ist es vorhanden, entnimmst du ihm die Angabe zum gewählten Stylesheet und bindest das entsprechende Stylesheet ein.

                    Das geht so, wie es Cybaer beschreibt, mit JavaScript[1] oder auch serverseitig z.B. mit PHP.

                    noch das die anderen Seiten dann den gewechselten Stylesheet verwenden.

                    [1] An dieser Stelle brauchst du auch keine "Angst" vor JavaScript haben, weil dies nicht überall verfügbar sein ist. Bei dem Stylesheetwechsler handelt es sich um eine nicht für den Betrieb einer Website notwendige Funktion. Fehlt sie, ist das nicht weiter schlimm.

                    Tschö, Auge

                    --
                    Die deutschen Interessen werden am Liechtenstein verteidigt.
                    Veranstaltungsdatenbank Vdb 0.2
                    1. Hi,

                      Wie gesagt, lasse den Besucher sein bevorzugtes Stylesheet auswählen.

                      Oder entwerfe *ein* Stylesheet, das "keine Wuensche offen" laesst.

                      Denn mal allgemein, die Seiten, die mir verschiedene Stylesheets zur Auswahl anbieten, haben in aller Regel lediglich eine handvoll "halbfertige", aber darunter kein einziges, welches wirklich zufriedenstellend ist.
                      Also lieber etwas mehr Arbeit in *ein* "richtig Gutes" investieren, als mir halbgaren Quatsch zur "Auswahl" anzubieten.
                      Ja, *ein* gutes Design erfordert etwas mehr Entschlussfreudigkeit. Ist mir aber lieber, als mehrere, wo ich lediglich den Eindruck bekomme, der Seitenautor selber wollte sich nicht festlegen, weil er eigentlich selber weiss, dass alle seine Entwuerfe nicht so der Bringer sind.
                      Also zeigt mal lieber etwas Rueckgrat, und steht zu eurer Entscheidung fuer *ein* Design - "ja, das habe ich entworfen, es soll das und das verkoerpern, dies und jenes ausdruecken". Das ist doch besser, als "hm, ja, also ich weiss auch nicht - such dir doch bitte selber aus, welcher von diesen Vorschlaegen dir der am wenigsten miserable zu sein scheint, hmkay?"

                      Von ein paar Ausnahmen abgesehen, wo jemand wirklich Kreativitaet im Ueberfluss in mehrere gute Designumsetzungen einfliessen lassen konnte, sind solche "Styleswitcher" in meinen Augen naemlich meist das gleiche wie "Besucherzaehler" o.ae. Unfug - untruegliches Indiz fuer eine mediokre Hobbybastlerseite.

                      MfG ChrisB

                      1. Hallo

                        Wie gesagt, lasse den Besucher sein bevorzugtes Stylesheet auswählen.

                        Oder entwerfe *ein* Stylesheet, das "keine Wuensche offen" laesst.

                        [...]

                        Das ist natürlich ein schlagendes Argument.

                        ... eine mediokre Hobbybastlerseite.

                        Wieder was gelernt. :-)

                        Tschö, Auge

                        --
                        Die deutschen Interessen werden am Liechtenstein verteidigt.
                        Veranstaltungsdatenbank Vdb 0.2
          2. Grüße,

            Außerdem ist die Idee mit der Session nicht so das Wahre. Läuft sie ab, muss der Benutzer wieder das bevorzugte Stylesheet anwählen. Besser wäre die Verwendung eines Cookies.

            eigtl setze ich session per cookie - aber sind die abgeshclatet kann der benutzer trotzdem css-umschalten^^ doppelt genäht hält besser ,)

            MFG
            bleicher

            --
            __________________________-
            Menschen an sich , sind nicht schlecht - es sind nur ihre Taten (c).
            Lieber bereuen gesündigt zu haben, als nicht sündigen und es später trotzdem bereuen.
            Boccaccio
            1. Hallo

              Außerdem ist die Idee mit der Session nicht so das Wahre. Läuft sie ab, muss der Benutzer wieder das bevorzugte Stylesheet anwählen. Besser wäre die Verwendung eines Cookies.

              eigtl setze ich session per cookie - aber sind die abgeshclatet kann der benutzer trotzdem css-umschalten^^ doppelt genäht hält besser ,)

              Gut, offensichtlich habe ich missverständlich formuliert. Es geht mir nicht um Session mit SID vs. Session mit Cookie, sondern um ein unabhängig von einer Session gesetztes Cookie. Eines, das nicht auf eine eventuell bereits abgelaufene Session verweist, sondern ein selbstgesetztes, dessen Laufzeit man bewusst bestimmt (z.B. 1 Jahr).

              Tschö, Auge

              --
              Die deutschen Interessen werden am Liechtenstein verteidigt.
              Veranstaltungsdatenbank Vdb 0.2
    2. Hi,

      du kombinierst php mit frames? imho ist das ein verbrechen...

      BTW: Wenn man Frames haben möchte/muß, dann ist die Kombination mit PHP (oder einer anderen serverseitigen Sprache), ganz hervorragend, weil man für die Beseitigung der angeblichen Probleme, die durch Frames entstehen, keinen Finger mehr manuell rühren muß.

      Gruß, Cybaer

      --
      Man kann doch sehr leicht jenen tugendhaften Menschen begegnen, (...) die eine Art "unkrümmbaren Zeigefinger" besitzen, der ständig den kalten Wind des Rechthabens ausströmt. (Wolfgang Huber, Bischof)
      Die Tugend jagt nicht den Teufel, sondern den Sündhaften. Damit wird sie zum Terror. (Hans-Ulrich Jörges, Journalist)
  3. Hi,

    Ich möchte auf meine Website einen Stylesheet Wechseler einbauen, der soll über einen Link aktiviert werden.

    Ich würde hier ja eher JS empfehlen. Ist wohl eher eine reine Komfortfunktion (also im Notfall verzichtbar), du hast Zugriff auf alle Frames, der Wechsel erfolgt in Echtzeit, und wenn Cookies deaktiviert sind, ist es auch kein Problem ...

    Gruß, Cybaer

    --
    Man kann doch sehr leicht jenen tugendhaften Menschen begegnen, (...) die eine Art "unkrümmbaren Zeigefinger" besitzen, der ständig den kalten Wind des Rechthabens ausströmt. (Wolfgang Huber, Bischof)
    Die Tugend jagt nicht den Teufel, sondern den Sündhaften. Damit wird sie zum Terror. (Hans-Ulrich Jörges, Journalist)