Version complète: sur le forum Webmaster Hub : PHP-CSS
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
vchahun
J'ai un problème existentiel dans mon système de feuilles de styles: je veux que le choix de l'utilisateur soit permanent (grâce à un cookie).
Voila le code que je pensais utiliser:
CODE
<html><head>[...]
<link rel="alternate stylesheet" type="text/css" href="style.php?css=fixed" title="Fixed" />
<link rel="alternate stylesheet" type="text/css" href="style.php?css=lynx" title="Lynx" />
<link rel="alternate stylesheet" type="text/css" href="/style.php?css=orange" title="Orange" />
link rel="stylesheet" type="text/css" href="style/style.php" title="Feuille de style actuelle" />

avec pour code PHP:
CODE
<?php
Header("Content-type:text/css");
if(isset($_GET['css'])) {$css=$_GET['css']; SetCookie("phpcss",$css,time()+630720000)}
elseif(isset($_COOKIE['phpcss'])) $css=$_COOKIE['phpcss'];
else $css="orange";
echo "@import url($css.css);\n";
?>

Or, quand j'inclue dans ma page les feuilles de styles alternatives, le navigateur charge en mémoire les CSS résultant et modifie les cookie 3 fois:
style.php?css=fixed => SetCookie("phpcss","fixed",time()+630720000)
style.php?css=lynx => SetCookie("phpcss","lynx",time()+630720000)
style.php?css=orange => SetCookie("phpcss","orange",time()+630720000)
Au final, le cookie a donc toujours pour valeur "orange". Si l'utlisateur change de feuille de style et visite une autre page, la feuille de style sélectionnée ne sera pas réutilisée, car le cookie prend une valeur "orange" avant que soit inclue la feuille de style.

Conclusion: quelqu'un aurait-il une proposition ou une alternative ??
PS: je sais que c'est pas facile à comprendre, posez-moi des questions ...
Dan
Salut vchahun,

Ce n'est pas un problème de code, mais simplement un problème de logique.
Comme tu le dis toi-même, le navigateur charge les 3 feuilles de style et change le cookie à chaque fois.

Je pense que tu devrais mettre du code php autour de tes balises <link rel...> pour éviter de les charger toutes les trois.
Par exemple:
CODE
if($_COOKIE['phpcss'])
   print "<link rel=\"stylesheet\" type=\"text/css\" href=\"style.php?css=".$_COOKIE['phpcss']."\" />";
else
 // la feuille de style par défaut


Dan
vchahun
Oui, mais comment fait alors le visiteur pour changer la feuille de style ?
Je vais finir pas opter vers la solution "JS stylesheet switcher" ...
ElMoustiko
Si tu veux j'ai fait un petit tuto rapide de style switcher PHP.

Il ne doit pas être totalement complet et bourrés de fautes, mais tu as déjà le principe.

http://www.elmoustikoblog.net/tutoriels/php/style_switcher/

Il va peut etre deconné, je l'ai repris sur un de mes sites mais le modifiant en "direct live" sans tester, mais a prori ca le fait.

Sinon la solution JS est tout à fait envisageable, mais la gestion des cookies avec JS est vraiment chiatique je trouve.

@++
vchahun
Je disais Javascript parce que les <select> qui servent de lien sont très utilisés ... [mais bien sur j'éviterai .....]
ElMoustiko
??????????????

Et ca voulait dire quelque chose ton truc là ?
bigornot
bah, pour prendre par exemple le style 1, tu le fais aller sur une page comme ça :

<?php
$css = "1";
session_start();
session_register("css");
?>
et apres, tu fais dans l'autre sens ..
je vois pas de probleme ...
vchahun
Il n'y a pas de problème pour ta solution, mais je voulais lui permettre de ne pas changer de page et de changer la feuille de style au moyen d'un "stylesheet-switcher", c'est à dire en restant sur la page, mais de toute façon IE n'en dipose pas ...
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.