Feuilles de style variables

Résolu/Fermé
katadrapata Messages postés 13 Date d'inscription samedi 21 octobre 2006 Statut Membre Dernière intervention 25 octobre 2006 - 21 oct. 2006 à 13:58
Ssylvainsab Messages postés 2884 Date d'inscription samedi 29 juillet 2006 Statut Modérateur Dernière intervention 15 août 2020 - 26 oct. 2006 à 18:10
Bonjour, je voudrais faire en sorte que les utilisateurs de mon site aient le choix entre deux interfaces graphiques. Pour cela, je dois certes avoir deux feuilles de styles différentes. Mais comment faire pour qu'en un clic, la feuille de style attachée à la page en cours change ? Je suppose que c'est très facile en php, mais je ne m'y connais pas assez bien... merci d'avance !

EDIT je précise qu'il s'agit d'un site sous SPIP, il y a donc déjà des appels php (les adresses contiennent des envois ?id_article=x, par exemple)
A voir également:

26 réponses

Ssylvainsab Messages postés 2884 Date d'inscription samedi 29 juillet 2006 Statut Modérateur Dernière intervention 15 août 2020 825
24 oct. 2006 à 17:51
Je pense qu"il vaut mieux faire le test de présence de la variable dès le début
C'est aussi ce que je voulais dire, mais bon, j'allais pas refaire tout le code pour ca.

Voici ce que je trouve le plus adapté :
<?php
//démmarage de la session
session_start();

// Si on a demandé un changement de style :
if isset($_SESSION['design'])
 {
  $design=htmlspecialchars($_SESSION['design']);
 }
elseif isset($_GET['design']) 
 {
    $design=htmlspecialchars($_GET['design'])
    if ($design=='design1')
     {
      $design='design1';
     }
    elseif ($design=='design2')
     {
      $design='design2';
     }
    //toujours faire une condition par défaut
    else
    {
      //design par défaut ou message d'erreur ?
    }
else
 {
   //on crée la variable par défaut de design
   $design='defaut';
 }

//puis :
$_SESSION['desgin']=$design;?>
Quelques commentaires sur ce code :
La condition par défaut qui ne devrait pas servir (else), je pense qu'il vaut mieux la mettre.

Ca peut servir au cas ou la variable design ne convient pas a celle enoncée, par exemple a cause d'une erreur de frappe ou si l'utilisateur a essayé d'executer du code (voir plus bas).

Ca parait stupide et on en aura surement pas besoin, mais on ne sait jamais.
Après, a toi de choisir si on met un message d'erreur ou le design par défaut.

Pour htmlspecialchars, c'est une fonction qui permet de replacer la caractères '<', '>', '&' et '"' (les guillemets) par leurs entitiés html.
Comme ca, si quelqu'un a de 'mauvaises intentions', le code qu'il a entré ne s'executera pas pas.




Ensuite, tu affiches ton code html, puis le style css :
<link rel="stylesheet" type="text/css" href="<?php echo $_SESSION['design'];?>" />



Incroyable... Je ne pensais pas qu'on pouvait aller aussi loin avec les css
C'est des propriétés supportés uniquement par les navigateurs avec le moteur Gecko (firefox camino...) et qui sera peut-être incluse dans la version 3 des css.
on peut aller beaucoup plus loin.
Regarde :
http://www.cssplay.co.uk/


a plus
0
xbb Messages postés 49 Date d'inscription dimanche 24 septembre 2006 Statut Membre Dernière intervention 10 mai 2007 1
25 oct. 2006 à 09:39
Huhu j'avais deja fourni ce lien ;)

Pour répondre à ce que tu as dit plus haut : ce qui me gène c'est que quoi qu'il arrive, tu redéfinis la variable de session, et ce même si le style n'a pas été demandé à changer. J'admets que ca demande tres peu de ressources de réassigner une seule variable, mais étant donné que cela se fera à n'importe quel changement de page, et en se plaçant dans le contexte d'un site tres visité, eh bien il y a un surplus d'utilisation de bande passante non négligeable.

C'est pour ça que j'avais préféré tester dès le début l'existance des variables (la get et la session), et en fonction, on exécute on non le code qui suit. Mais UNIQUEMENT dans certaines conditions.
Au final le code sera plus léger car ne s'exécutera pas à chaque page (je doute que les users décident de changer le style à chaque page).


Maintenant, chacun ses préférences hein :)
0
katadrapata Messages postés 13 Date d'inscription samedi 21 octobre 2006 Statut Membre Dernière intervention 25 octobre 2006
25 oct. 2006 à 11:49
Dites, je voudrais que le changement de design soit pris en compte pour, mettons, une ou deux heures, voire une journée, plutôt qu'à chaque connexion (en fermant le navigateur). J'ai trouvé deux solutions, mais je n'arrive pas à les utiliser :

- modifier la durée de la session dans php.ini -> où se trouve php.ini ??

- utiliser la fonction session_write_close() -> il suffit d'ajouter cette fonction au code ??
0
xbb Messages postés 49 Date d'inscription dimanche 24 septembre 2006 Statut Membre Dernière intervention 10 mai 2007 1
25 oct. 2006 à 13:30
Je ne connais pas la session write close.

La durée d'une session ne prend pas en compte le changement d'ip. Donc si on se déconnecte - reconnecte, la session précédente n'existera plus.

Je te conseille plutôt de faire un pett cookie, là tu es sûr que le style sera mémorisé à vie sur le pc de l'utilisateur (si l'utilisateur n'efface pas ses cookies évidemment)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
katadrapata Messages postés 13 Date d'inscription samedi 21 octobre 2006 Statut Membre Dernière intervention 25 octobre 2006
25 oct. 2006 à 13:57
Si l'utilisateur se déconnecte et reconnecte, tant pis pour lui, je parlais plutôt de la fermeture du navigateur...

Ca me gènerait un peu d'avoir recours aux cookies, mais pourquoi pas. SPIP génère un cookie, mais je ne sais pas l'utiliser pour stocker une variable, et si je génère un autre cookie, le script ne sert plus à rien, j'imagine. Je ne sais pas comment stocker une variable dans un cookie:)

EDIT session write_close() ici : https://cyberzoide.developpez.com/php4/faqsession/
0
Ssylvainsab Messages postés 2884 Date d'inscription samedi 29 juillet 2006 Statut Modérateur Dernière intervention 15 août 2020 825
26 oct. 2006 à 18:10
Bonsoir.

Pour faire un cookie, c'est la fonction setcookie.
Ensuite, si je me souviens bien, elle prend trois paramètres :
setcookie(nomducookie,valeur,temps d'expiration)

Mais c'est moins sécurisé que les sessions, car la variable est stockée dans l'ordinateur de l'utilisateur et pas sur le serveur.

Sinon, une astuce pour trouver les fonctions :
il suffit de taper php.net/nom de la fonction

Par exemple :
https://www.php.net/setcookie

a plus
0