Verschiedene CSS-Datein wählbar

hi,

ich möchte das der User zwischen verschiedenen Templates wählen kann und vieleicht, muss aber nicht sein, das die einstellung für ihn gespeichert würde.

vielen dank

fabi

Verschiedene Templates/Stylesheets erstellen und dann per PHP auswählen. (Und eventuell als Cookie speichern)

danke mgier. das habe ich mir gedacht. aber wie geht das?
vergleicht es mal mit kino.to die drei kleinen button ganz rechts unten im header über der suche

Hi,

falls du mal im Quellcode von deiner genannten Seite geschaut hast findest du das:

[code]

Style Select
[/code] Dabei sieht man zwar nicht soviel aber zumindest das es etwas mit onclick zu tun hat. Vieleicht kannst du ja mal googlen mit dem Stichwort "onclick" und "Style ändern" oder sowas die Richtung. Wenn ich morgen Zeit und Lust habe probier ich vieleicht auch mal en bisschen.(heißt nicht das ich dir 100% helfen kann, da ich sowas ja auch noch nicht gemacht habe) Daher schau lieber schon mal selbst.

Gruß Nikolas

Hallo cern

Hier http://www.dynamicdrive.com/dynamicindex9/stylesheetswitcher.htm findest du das was du möchtest.

Gruß Camou !coffee

Der Vorschlag von wingi ist mangelhaft, weil in den Formular
keine passenden Formularelemente verwendet werden, werden
die Daten auch nicht abgeschickt. Zudem müßte man sie dann
per PHP auswerten, um etwas zu ändern.

Auch das von Camou vorgeschlagene Skript ist mangelhaft, weil
es offenbar ungültiges (X)HTML produziert und offenbar auch gar
nicht funktioniert, wenn Skriptinterpretation deaktiviert ist.
Da Skriptinterpretation nichts mit CSS zu tun hat, sind solche
Skripte also ziemlich unsinnig.

In XML/XHTML kann man für den Zweck auch alternative
Stilvorlagenverarbeitungsanweisungen angeben und in (X)HTML
auch per Element link alternative Stilvorlagen anbieten.
Allerdings sind die meisten Implementierungen in der Hinsicht
etwas mangelhaft, als die bei einem Seitenwechsel den
alternativen Stil nicht beibehalten (der Konqueror hat das z.B.
sinnvoll implementiert).

Recht robust ist die Methode, den Stil als GET-Parameter an die
URI anzuhängen und dann jeweils mit PHP auszuwerten und den
ausgewählen Stil dann als primäre Vorlage anzubieten, die
anderen kann man ja unabhängig davon auch listen. So mache
ich das bei den meisten meiner Projekte. Irgendwo gibt es dann
noch ein kurzes Untermenü, wo man den Stil auswählen kann.

danke für eure antworten. ich hatte es mal so ausprobiert

 <head>
  <link rel... href="css1.css" title="css1" />
  <link rel... href="css2.css" title="css2" />
 </head>
 <body>
  <a href="#css1">Stylesheet1</a><a href="#css2">Stylesheet2</a>
 </body>

Hat leider nicht ganz geklappt. ich werde mal n bisschen weiter googlen.

vielen dank

fabi

Das müßtest du dann schon mit PHP machen, wenn du selber
was konstruieren willst und dich nicht auf die browser verlassen.

Ein Menü für alternative Stilvorlagen stellt der browser selbst zur
Verfügung, darum muß sich der Autor nicht kümmern (Opera,
Mozilla, Konqueror machen das, der MSIE wohl immer noch nicht).
Eine andere Frage ist, wieviele Nutzer von browsern überhaupt
von dem Stilvorlagenauswahlmenü ihres browsers wissen und es
verwenden ;o) Die browser zeigen ja auch nicht besonders
auffällig an, wenn für eine Seite mehrere Stilvorlagen verfügbar
sind.

Für die PHP-Variante, die unabhängig von den Mängeln der
browser die alternativen Stilvorlagen verfügbar macht,
verwendest du jeweils einen GET-Parameter, den mußt du dann
in jeder Datei einlesen:

<?php if(isset($_GET['stil'])) { $stil=$_GET['stil']; } else { $stil='einfach'; } ?>

Einbinden sinngemäß dann so:

<?php $cssverzeichnis='css/'; $stildatei=$cssverzeichnis.$stil.'.css'; echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"$stildatei\" title=\"Auswahl: $stil\" /> \n"; ?>

Auswahl sinngemäß so:

<h3>Stilvorlagen</h3>
<ul>
<li><a href="?stil=a">a</a></li>
<li><a href="?stil=b">b</a></li>
<li><a href="?stil=c">c</a></li>
<li><a href="?stil=einfach">einfach</a></li>
</ul>

Verweise zu anderen Seiten, um den Stil beizubehalten,
haben sinngemäß folgende URI mit PHP gebastelt:
anderes.php?stil=<?php echo $stil ?>
Oder wenn die schon GET-Parameter haben:
anderes.php?irgendwas=beispiel&stil=<?php echo $stil ?>

Die anderen Seiten lesen dann entsprechend den GET-Parameter
wieder ein.

das verwendete Design kann man auch in einem Cookie speichern.

<?php

$styles = array('default', 'style1', 'style2');

$style = $styles[0];

if(isset($_GET['style']))
  $style = $_GET['style'];
elseif(isset($_COOKIE['style']))
  $style = $_COOKIE['style'];

if(!in_array($style, $styles))
  $style = $styles[0];

setcookie('style', $style, time()+1800); //store Cookie for 30 Minutes
?>

<!-- HTML Stuff -->

<!-- HEAD -->
<link rel="stylesheet" type="text/css" href="/styles/<?=$style?>.css" />

<!-- HTML Stuff -->

<!-- BODY -->
<a href="?style=style1">Design 1!</a>
<!-- usw... -->

Dann eher in einer ‘session’ als nur in einem cookie.
Ein Besucher mag nicht unbedingt einsehen, daß die Annahme
eines cookies sinnvoll ist. Bei einer ‘session’ täte PHP dann immer
noch versuchen, dies als GET-Parameter anzuhängen (und dann
mehr oder weniger selbst zu verwalten).
Der Vorteil eines cookies ist natürlich bei jenen, die es annehmen,
daß der Stil bei einem späteren Aufruf ausgewählt bleibt.
Um dies ohne cookie zu erreichen, müßte der Nutzer ein
Lesezeichen mit dem GET-Parameter setzen.

Kurzschreibweise wie ‘<?=$style?>’ täte ich auch vermeiden,
weil das eine schlechte Konfiguration von PHP voraussetzt, die
bei anderen Verarbeitungsanweisungen (wie die für XML)
falsche PHP-Fehlermeldungen hervorruft.

Eine Session wird standardmäßig auch per Cookie weitergegeben. Um die Weitergabe per POST/GET muss man sich selbst kümmern.

@Kurzschreibweise: Meiner Meinung nach ist sie besser lesbar. Außerdem sollte man XML-Dokumente nicht mit statisch einprogrammiertem PHP generieren, sondern eher über DOM oder so. Auf jeden Fall ist sie hier aktiviert und darum funktioniert es auch :wink:

[quote=“hoffmann”]Dann eher in einer ‘session’ als nur in einem cookie.
Ein Besucher mag nicht unbedingt einsehen, daß die Annahme
eines cookies sinnvoll ist.[/quote]
Dann bekommt er halt etwas weniger optionale Funktionalität geboten.

Für so etwas Sessions einzusetzen, die auch noch serverseitig erheblichen* Zusatzaufwand bedeuten, finde ich ungünstig.

  • gemessen an der umzusetzenden Aufgabe

session ist auch nicht deutlich aufwendiger als cookie.
Bei entsprechender Konfiguration wird die session automatisch
per GET geführt, wenn cookies nicht verfügbar sind, da muß
man sich nicht gesondert drum kümmern.

Da generell sessions, cookies, js nichts mit der Dekoration per
CSS zu tun haben, sollte letzteres dann auch so verfügbar sein,
daß man nicht auf eine bestimmte andere Technik angewiesen
ist.
Ich habe öfter mal das Erlebnis, auf defekte Seiten zu stoßen,
wo versprochene Aktionen nicht stattfinden oder man auf etwas
klickert, was wie ein Veweis aussieht, wonach aber nichts
passiert, oder auf ein Formular, welches nicht abgeschickt oder
ausgewertet wird. Da kann man dann davon ausgehen, daß da
unausgegorener Unfug dahintersteckt, der sich auf etwas verläßt,
was nicht immer funktioniert. Gleichzeitig wird der Betrachter mit
dem Defekt alleingelassen, der dann den Eindruck gewinnt, daß
entweder er selbst zu doof ist, der browser defekt oder aber der
Autor ein Depp ist - alles kein schönes internet-Erlebnis, was der
Autor eben mit etwas Überlegung vermeiden kann (was nicht
ausschließt, daß all die Eindrücke korrekt sind, viele wollen das
aber gar nicht so unmittelbar vorgehalten bekommen ;o)

ich würde gerne mal die meinung anderer dazu hören.

wenn man z.B. nur die Headergrafik austauschen will, geht sowas dann nicht auch via JavaScript? gar nicht die css datein austauschen, sondern nur die grafik? auch wenn man dann die einstellung nicht speichern könnte.

jeenaparadies.net/weblog/2006/jan/zufallsheader

Wie man das am besten austauscht, hängt entscheidend davon
ab, welchen Sinn der Austausch hat und auf welches Ereignis hin
der erfolgen soll.

Wenn das Bild nur einmal zufällig beim Seitenaufruf ausgewählt
werden soll, macht man das wohl am besten mit PHP.