Un petit truc que j'ai utilisé sur quelques-uns de mes sites permettant de changer le skin du site sans recharger la page.
Les fichiers CSS se trouvent sans les divers tags link du document HTML.
Avec un peu de JS, il est possible de les changer à la volée.
L'exemple qui suit suppose que les css sont organisés par thème.
Ainsi, on aura
theme/defaut/css/general.css
theme/defaut/css/forum.css
theme/defaut/css/map.css
theme/bleu/css/general.css
theme/bleu/css/forum.css
theme/bleu/css/map.css
theme/rouge/css/general.css
etc
Les fichiers CSS se trouvent sans les divers tags link du document HTML.
Avec un peu de JS, il est possible de les changer à la volée.
L'exemple qui suit suppose que les css sont organisés par thème.
Ainsi, on aura
theme/defaut/css/general.css
theme/defaut/css/forum.css
theme/defaut/css/map.css
theme/bleu/css/general.css
theme/bleu/css/forum.css
theme/bleu/css/map.css
theme/rouge/css/general.css
etc
Code PHP :
<?php
<script type="text/javascript">
function switchTheme(newStyle){
//Récupération des 'links'
var aLinks = document.getElementsByTagName("link");
var oldStyle='';
//Parcours du tableau
for(var i=0;i<aLinks.length;i++){
//Test pour voir si c'est une feuille de style
if(aLinks[i].rel.toLowerCase()=='stylesheet'){
//oldStyle est une chaine contenant le nom du style précédent
//Elle est utilisée pour les remplacements et n'est initialisée que si elle est vide
if(oldStyle==''){
oldStyle=aLinks[i].href.substr(aLinks[i].href.lastIndexOf('/theme/')+7);
oldStyle=oldStyle.substring(0,oldStyle.lastIndexOf('/css/'));
}
aLinks[i].href=aLinks[i].href.replace('/theme/'+oldStyle+'/css/','/theme/'+newStyle+'/css/');
}
}
//Sauvegarde du nouveau thème dans les préférences du visiteur
//J'utilise de l'Ajax avec des objets fait maison pour y parvenir
// Mais chacun employer sa propre méthode
var _xhr= new HTTPObject();
_xhr.addArg('site_theme',newStyle);
_xhr.setLoader(false);
_xhr.sendMode='POST';
_xhr.get('./include/tools.php5');
}
</script>
Pour voir le système en action, vous pouvez aller sur cette page.
Vous pouvez changer le style en le sélectionnant dans la boite en bas à gauche (thème actif).