Sélecteur CSS

Sélecteur CSS - PHP - Programmation

Marsh Posté le 15-05-2008 à 15:26:47    

Bonjour à tous,
 
Malgré le titre "sélecteur CSS" c'est dans du PHP que se pose mon problème.
Je souhaite faire ce qu'on appelle un sélecteur de CSS, c'est à dire que j'ai plusieurs feuilles de style css pour le design de mon site, et que par un bouton, on sélectionne (et non pas on change) le style voulu.
La différence est plutôt importante apparemment parce que je ne veux pas le faire à la volée. Le visiteur choisit sur la page index en cliquant sur un bouton le style CSS et le garde pour tout le site. S'il veut rechanger, il doit retourner sur la page index.
A noter que la page index n'a pas de style externe donc n'appelle pas les CSS externes. C'est seulement aux pages suivantes que le style externe est appelé.
 
Donc sur ma page index.php, j'ai mis cela :

Code :
  1. <?php
  2.       if(isset($_GET['design'])){
  3.          if($_GET['design']==1)
  4.          {
  5.             echo '<link href="css_original.css" rel="stylesheet" title="design" type="text/css" media="screen" />';
  6.          }
  7.          elseif($_GET['design']==2)
  8.          {
  9.             echo '<link href="css_fresh.css" rel="stylesheet" title="design" type="text/css" media="screen" />';
  10.          }
  11.          }
  12. ?>


 
 
Sur les 2 boutons de la page index (sélecteur) dans <body> :

Code :
  1. <a href="HTML_test/home.php?design=1">Original</a> - <a href="HTML_test/home.php?design=2">Fresh</a>


 
Sur mes autres pages dans <html>, pour récupérer la variable (et donc le CSS) et le charger :

Code :
  1. <link href=<?PHP echo "\"$design\""; ?> rel="stylesheet" media="screen" type="text/css" title="Design" />


 
Le problème, c'est qu'une fois sur les pages suivantes, aucun CSS n'est chargé. En fait, il récupère bien la valeur si ce que je lis est bon (1 ou 2) mais ne charge pas le css correspondant.
Je précise qu'en HTML/CSS, je me débrouille, mais en PHP, je débute, j'essaie de m'y mettre avec ce petit exercice justement après plusieurs tutos.
J'ai déjà fait une recherche sur le forum et le web, seulement, tous les switchers que je trouve sont sous forme de menu déroulant et avec cookie pour se souvenir de la sélection lors du retour de l'utilisateur. J'aimerais éviter les cookies du fait qu'une fois le visiteur parti, lorsqu'il revient il a de nouveau le choix. Je pensais pourvoir adapter la méthode mais apparemment non.
Du coup j'aurais aimé un coup de main si vous voyez ce qui cloche.
 
Merci.

Message cité 2 fois
Message édité par mr_p@tate le 16-05-2008 à 16:26:03

---------------
Il n'y a pas de mauvais drakkars ou de mauvais temps, il n'y a que des marins de merde. --//-- Topic ventes
Reply

Marsh Posté le 15-05-2008 à 15:26:47   

Reply

Marsh Posté le 15-05-2008 à 15:34:37    

mr_p@tate a écrit :

Bonjour à tous,
 
Malgré le titre "sélecteur CSS" c'est dans du PHP que se pose mon problème.
Je souhaite faire ce qu'on appelle un sélecteur de CSS, c'est à dire que j'ai plusieurs feuilles de style css pour le design de mon site, et que par un bouton, on sélectionne (et non pas on change) le style voulu.
La différence est plutôt importante apparemment parce que je ne veux pas le faire à la volée. Le visiteur choisit sur la page index en cliquant sur un bouton le style CSS et le garde pour tout le site. S'il veut rechanger, il doit retourner sur la page index.
A noter que la page index n'a pas de style externe donc n'appelle pas les CSS externes. C'est seulement aux pages suivantes que le style externe est appelé.
 
Donc sur ma page index.php, avant <html> j'ai mis cela :

Code :
  1. <?php
  2.       if(isset($_GET['design'])){
  3.          if($_GET['design']==1)
  4.          {
  5.             echo '<link href="css_original.css" rel="stylesheet" title="design" type="text/css" media="screen" />';
  6.          }
  7.          elseif($_GET['design']==2)
  8.          {
  9.             echo '<link href="css_fresh.css" rel="stylesheet" title="design" type="text/css" media="screen" />';
  10.          }
  11.          }
  12. ?>


 
 
Sur les 2 boutons de la page index (sélecteur) dans <body> :

Code :
  1. <a href="HTML_test/home.php?design=1">Original</a> - <a href="HTML_test/home.php?design=2">Fresh</a>


 
Sur mes autres pages dans <html>, pour récupérer la variable (et donc le CSS) et le charger :

Code :
  1. <link href=<?PHP echo "\"$design\""; ?> rel="stylesheet" media="screen" type="text/css" title="Design" />


 
Le problème, c'est qu'une fois sur les pages suivantes, aucun CSS n'est chargé. En fait, il récupère bien la valeur si ce que je lis est bon (1 ou 2) mais ne charge pas le css correspondant.
Je précise qu'en HTML/CSS, je me débrouille, mais en PHP, je débute, j'essaie de m'y mettre avec ce petit exercice justement après plusieurs tutos.
J'ai déjà fait une recherche sur le forum et le web, seulement, tous les switchers que je trouve sont sous forme de menu déroulant et avec cookie pour se souvenir de la sélection lors du retour de l'utilisateur. J'aimerais éviter les cookies du fait qu'une fois le visiteur parti, lorsqu'il revient il a de nouveau le choix. Je pensais pourvoir adapter la méthode mais apparemment non.
Du coup j'aurais aimé un coup de main si vous voyez ce qui cloche.
 
Merci.


 

Code :
  1. <?php
  2.       if(isset($_GET['design'])){
  3.          if($_GET['design']==1 || (empty($_GET['design']) && $_SESSION['design']==1))
  4.          {
  5.             echo '<link href="css_original.css" rel="stylesheet" title="design" type="text/css" media="screen" />';
  6.             $_SESSION['design']=1;
  7.          }
  8.          elseif($_GET['design']==2|| (empty($_GET['design']) && $_SESSION['design']==2)
  9.          {
  10.             echo '<link href="css_fresh.css" rel="stylesheet" title="design" type="text/css" media="screen" />';
  11.             $_SESSION['design']=2;
  12.          }
  13.        }
  14. ?>


 
Un truc dans ce genre là devrait marcher, mais il manque la gestion du design par défaut

Reply

Marsh Posté le 16-05-2008 à 10:56:42    

Désolé de ne pas avoir répondu plus tôt, je faisias de la bidouille avec les session justement :D.
Alors pour la gestion du CSS par défaut, je n'en ai pas puisqu'il n'y en a pas. La page index a son CSS propre, et le visiteur est obligé de cliquer sur un des 2 boutons pour continuer sa visite. Et lors du clic, il passe à la page principal (acceuil on va dire) en même temps qu'il sélectionne le CSS, donc il est obligé d'en avoir un de toute façon.
 
Pour ton code, comme on utilise des sessions, il ne manque pas "session_start();" au début ?
 
Cela dit, toujours ce CSS qui ne se charge pas.
Lorsque j'arrive sur ma page suivante, j'ai ça en code source :

Code :
  1. <link rel="stylesheet" media="screen" type="text/css" title="design" href="1"/>


 
Le 1 correspond à la valeur de ma variable si on clique sur le bouton 1. Le truc c'est qu'à la place du 1, je voudrais le chemin du CSS. Je ne comprends pas pourquoi il charge 1 et non pas le chemin.


Message édité par mr_p@tate le 16-05-2008 à 11:11:07

---------------
Il n'y a pas de mauvais drakkars ou de mauvais temps, il n'y a que des marins de merde. --//-- Topic ventes
Reply

Marsh Posté le 16-05-2008 à 13:12:50    

J'ai rien compris à ton truc ... déjà pourquoi sur "index.php" tu fais un "echo <link etc..." AVANT <html> ?

 

Ensuite, il sort d'où ton $design ?


Message édité par Dj YeLL le 16-05-2008 à 13:13:23

---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 16-05-2008 à 16:32:37    

ENf ait c'était avant parce que j'avais essayé les SESSION avant Paulp ne m'en parle déjà, et que pour les sessions, il fallait que ce soit avant les balises html si j'ai bien compris le tuto. Bref en tout cas maintenant, c'est DASN html mais ça ne marche pas quand même.
C'ets vrai qu'à y réfléchir, je ne vois pas pourquoi j'ai mis echo<...> finalement sur la page index.
 
En fait, je veux qu'en cliquant sur un bouton, le CSS correspondant se charge sur les pages suivantes, pas sur index. Le bouton servant aussi à "entrer" sur le site. Et je pensais créer une variable "design", avec une valeur (1 ou 2 en fonction du bouton), et récupérer cette valeur sur les pages suivantes pour charger le CSS correspondant.
 
Du coup mon $design je pensais que c'était $_GET['design'].
 
Je le répète, je débute en php, après avoir lus des tutos, je me suis lancé dans mon premier truc php sans filet. Apparemment, faut que je relise les tutos.
 
En tout cas merci pour les réponses.


---------------
Il n'y a pas de mauvais drakkars ou de mauvais temps, il n'y a que des marins de merde. --//-- Topic ventes
Reply

Marsh Posté le 16-05-2008 à 16:48:06    

Tu peux faire un truc dans le genre :

 

Dans ton index (sans oublier le session_start()) :

 
Code :
  1. <?php
  2. if(isset($_GET['design']))
  3.    $_SESSION['design'] = intval($_GET['design']);
  4. ?>
 

Dans toutes tes pages (toujours sans oublier le session_start()), dans <head></head> :

 
Code :
  1. <?php
  2. if(empty($_SESSION['design']))
  3.    $_SESSION['design'] = 1;
  4.  
  5. switch($_SESSION['design'])
  6. {
  7.    case 1:
  8.        // ta CSS 1
  9.    break;
  10.  
  11.    case 2:
  12.        // ta CSS 2
  13.    break;
  14.  
  15.    case 3:
  16.        // ta CSS 3
  17.    break;
  18.    
  19.    // etc...
  20.    default:
  21.        // ta CSS par défaut
  22.    break;
  23. }
  24. ?>


Message édité par Dj YeLL le 16-05-2008 à 16:49:12

---------------
Gamertag: CoteBlack YeLL
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed