Les feuilles de style CSS
Le principe est donc simple : vous gardez la même page HTML et vous possédez deux feuilles de style CSS différentes. C'est-à-dire que vous avez votre partie HTML (je donne un exemple très basique pour ceux qui ne sauraient plus ce qu'est du HTML

) :
Code : HTML | <div id="debut">
<h1>Mon super site</h1>
<p>Grâce à <span class="nom">M@teo</span> et son site <a href="http://www.siteduzero.com">Le Site du Zér0</a>, j'ai enfin pu créer mon premier site !
</p>
</div>
|
Nous avons aussi nos deux feuilles de style CSS (je vous en donne deux extraits issus de fichiers différents) :
Code : CSS | /*design_bleu.css*/
#debut
{
position: absolute;
left: 5px;
}
h1
{
color: black;
}
|
Code : CSS | /*design_orange.css*/
#debut
{
position: absolute;
right: 25px;
}
h1
{
color: red;
}
|
Simple, non ?
On a bien une même page avec différents codes de style...
Le formulaire
Occupons-nous maintenant du formulaire pour que l'utilisateur puisse choisir son style. Nous allons d'abord voir comment le formulaire fonctionne en renvoyant toujours sur la même page, puis ensuite en renvoyant sur la page courante.
Que nous faut-il, déjà ?
Allez... réfléchissez un peu (oui, je suis sadique !).
Première solution
Secret (cliquez pour afficher)Le formulaire doit proposer le choix des designs et envoyer le résultat. Après, on récupèrera ce résultat et on en fera quelque chose.
J'espère que vous n'avez pas imaginé des choses trop compliquées !

Allez, regardons comment on doit faire et commentons.
Code : PHP | <form method="post" action="site.php?choix=home">
<p>
<label>Choix du design :<br/>
<select name="choixdesign" onchange="this.form.submit();"><!--On envoie dès que la personne sélectionne... pas de bouton-->
<option value="design_orange.css" <?PHP ChoixDuSelected($design,"design_orange.css"); ?> >Orange et gris</option>
<option value="design_bleu.css" <?PHP ChoixDuSelected($design,"design_officiel.css"); ?> >Bleu et noir</option>
</select>
</label>
</p>
</form>
|
Code : PHP | <?PHP
function ChoixDuSelected($element1,$element2)
{
if($element1==$element2)
{
echo 'selected="selected"' ;
}
}
?>
|
Comme vous avez pu le remarquer, je n'ai pas mis de bouton mais un
onchange="this.form.submit();", qui permet d'envoyer le résultat dès qu'une option a été sélectionnée. C'est très pratique pour ce petit formulaire car, ainsi, il est plus discret.
Tout simplement, l'utilisateur choisit son design et on envoie par le formulaire le choix qui a été fait... Remarquez que j'ai mis dans
value les noms des feuilles de style. Ça fonctionne très bien, je n'ai jamais eu de problème avec.
On a créé une petite fonction en PHP, nommée
ChoixDuSelected, qui permet d'ajouter un attribut à notre liste d'options. Ainsi, le design courant sera le choix par défaut de la liste d'options. Le fonctionnement est simple : on compare la valeur de la variable contenant notre choix (
remarquez que CETTE variable sera utilisée plus tard) à la valeur de l'attribut
value du formulaire. Si ces deux éléments sont égaux, alors il s'agit du design choisi.
En effet, avec notre élément en JavaScript, le formulaire n'est validé que lorsqu'on choisit une option différente de celle affichée lorsque la liste n'est pas déroulée (le choix par défaut). Imaginez qu'il n'y ait que deux choix dans la liste, et que vous aviez choisi la deuxième. Sans l'attribut placé, vous êtes sur le premier choix par défaut. Pour changer de design, il vous faut donc en sélectionner un autre. Or, il faut
changer : le premier est sélectionné par défaut et vous êtes sur le deuxième... Résultat : vous êtes coincé et ne pouvez pas changer de design.
En conclusion :
vous devez utiliser cette fonction.
Deuxième solution
Comme me l'a demandé un zéro, il faudrait que le formulaire renvoie sur la page courante (c'est-à-dire celle que l'on visionne quand on veut changer de style). En fait, la réponse n'est pas si simple, car cela dépend de la façon dont vous récupérez vos pages. Je vais vous indiquer comment je fais, et je vous donnerai ma solution.
Pour commencer, il faut se souvenir comment envoyer des variables dans les adresses, c'est-à-dire avec
$_GET['page']. Vous pouvez revoir ça sur
les cours PHP de M@teo21.
Mon code est simple. Je n'ai qu'une page (
site.php) et avec l'envoi de variables et des
include, j'y inclus mes morceaux de pages. Cela signifie que le formulaire ne doit pas renvoyer sur
site.php, mais sur
http://www.monsite.com/site.php?page1=27&page2=07.
Voici alors la solution que j'ai adoptée pour écrire la première ligne du formulaire, c'est-à-dire
à la place de
<form method="post" action="site.php?choix=home"> :
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 | <?PHP
if( isset($_GET['page1']) )
{
$page1=$_GET['page1'];
}
if( isset($_GET['page2']) )
{
$page2=$_GET['page2'];
}
echo '<form method="post" action="site.php?';
if( $page1 != "" )
{
echo '&page1='.$choix;
}
if( $page2 != "" )
{
echo '&page2='.$choix2;
}
echo '">';
?>
|
Le code est très simple, je vous laisse donc essayer de le comprendre. Au début, on récupère les variables de la barre d'adresse dans des variables simples, SI elles existent. On ne fait ensuite que récupérer l'adresse courante et la mettre dans le formulaire du design pour que ce formulaire renvoie sur la page où on se trouve actuellement. Mais n'oubliez pas alors que le traitement du formulaire doit
toujours être présent.
Ce système fonctionne lorsque vous changez de page en utilisant les variables dans l'adresse. Personnellement, cela marche parfaitement sur le site dont je vous donnerai l'adresse plus tard. Bien sûr, pour que cela fonctionne, mettez bien
toutes les possibilités. Si vous en oubliez une, il y aura des pages où cela ne marchera pas.
Récupérer les données du formulaire
Vous devez mettre ce petit script au début de votre page, avant la partie HTML qui indique quelle feuille de style utiliser !
Que doit faire notre script en PHP ?
Il doit récupérer le résultat de notre formulaire et enregistrer dans une variable le choix effectué par l'utilisateur. Mais n'oubliez pas qu'un visiteur qui n'a rien choisi (première visite, par exemple) doit tout de même avoir un style...

Il faut donc un design par défaut.
Problème : lorsque l'utilisateur aura choisi son design, il va falloir garder en mémoire son choix, sans quoi au premier changement de page, on reviendra au design par défaut.

Je vous propose donc l'utilisation d'un cookie.
C'est à cause de ce cookie qu'il faut placer le code en début de page !
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 | <?PHP
$differents_designs=array("design_orange.css","design_bleu.css");
if( isset( $_COOKIE['design'] ) )
{
$design=$_COOKIE['design'];
if( !(in_array($design,$differents_designs)) )//si le cookie indique un design inexistant
{
$design="design_orange.css";
}
}
else
{
$design="design_orange.css";
}
if( isset ( $_POST['choixdesign'] ) )
{
//On enregistre dans une variable pour le choix du design
$design=$_POST['choixdesign'];
if( !(in_array($design,$differents_designs)) )
{
$design="design_orange.css";
}
//On met dans un cookie d'une durée de vie d'un an
$timestamp_expire=time()+365*24*60;
setcookie('design',$design,$timestamp_expire);
}
?>
|
Et voilà.
Que se passe-t-il dans ce code ?
Premièrement
On regarde s'il existe un cookie de notre site contenant les données liées au design. On rappelle que la fonction
isset(X) correspond à «
X existe »... Mais ça, vous devez le savoir si vous avez suivi les cours de PHP.
Si ce cookie existe : on enregistre la donnée dans la variable
$design. On vérifie que ce design existe (on aura créé un tableau contenant les différents designs comme vous le voyez) ; s'il n'existe pas, c'est soit une erreur de votre part, soit une tentative de piratage...

On utilise alors le design par défaut. Si le design est dans le tableau, alors tout va bien et on continue.
Si ce cookie n'existe pas : on enregistre dans la variable
$design le choix par défaut...
Attention : le choix par défaut se fait ici.
Ainsi, lorsque l'utilisateur navigue de page en page, le cookie contiendra l'information liée au design.
Deuxièmement
L'utilisateur peut décider de changer de design. On regarde si des informations provenant du formulaire sont présentes.
if( isset ( $_POST['choixdesign'] ) )
Si des informations arrivent : on enregistre dans la variable
$design le choix qui a été fait... On rappelle qu'il s'agira ici de
design_orange.css ou de
design_bleu.css. De plus, pour garder ce choix en mémoire, on l'enregistre dans un cookie. L'idée est simple (surtout si vous avez suivi les cours de PHP sur les cookies

) : on indique un temps d'expiration et on enregistre dans le cookie le choix du design. C'est ce cookie qui sera lu dans la première partie du code PHP.
Je vous rappelle que ce code PHP doit être placé en début de page, tout comme la fonction setcookie() qui doit être placée avant tout code HTML !
Et avec tout ça ?
Avec tout ça, il nous faut donc terminer en expliquant au navigateur quel est le style choisi...
Voyons comment nous allons nous en occuper. Regardons d'abord un code normal pour l'appel de la feuille de style CSS :
Code : HTML | <head>
<title>Bienvenue sur le site de la danse des canards</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link rel="stylesheet" media="screen" type="text/css" title="Design" href="design_orange.css" />
</head>
|
Il nous faut donc modifier le code
href="design_orange.css" et mettre celui qui nous intéresse... Rien de plus simple, puisque nous avons enregistré dans la variable
$design le nom du fichier CSS qui nous intéresse et que ce code a été placé en amont de ce code HTML (regardez, j'ai laissé l'ouverture de la balise HTML) !
Il nous faut donc changer la partie concernée en :
Code : PHP | <link rel="stylesheet" media="screen" type="text/css" title="Design" href=<?PHP echo "\"$design\""; ?> />
|
Et voilà ! L'appel de votre feuille de style CSS se fera donc par ce simple
echo dans la balise
<link>.
Simple, isn't it ? 