Problème avec le Style Switcher Smiley decu

Bonsoir,

J'ai plusieur styles pour mon site et j'ai quelques soucis pour le style switcher... il doit y avoir quelque chose qui ne va pas dans mon code... qui est assez compliqué !

Explications :
Sur toutes les pages de mon site, j'inclu une page PHP qui contient toutes les infos du site...
Sur toutes mes pages, la balise <link.. /> de mon style est remplacée par un code PHP <?php echo $style; ?>.
Cette variable est déterminé dans la page PHP incluse en début de page...
Et dans la variable $style, le chemin du style contient la variable $css du style switcher...

Vous m'avez suivi ? Smiley murf

Smiley sweatdrop Sur la page qui effectue le changement de style, j'ai mit ce bout de code avant l'inclusion de la page d'information PHP :
if(isset($_POST['switch']))
// On vérifie que le formulaire a été soumis
{
	if(file_exists("./".$_POST['style']."/index.css"))
	{
		// On fait un cookie d'une année de durée pour garder en mémoire le style choisi et le récupérer à la prochaine visite
		setcookie('style', $_POST['style'], time()+(365*24*3600));
		// Si le fichier *.css existe on définit une variable $css correspondant au style choisi
		$css = $_POST['style'];
	}
}

Et au tout début de la page PHP qui contient toutes les infos, il y a ceci :
if(isset($_COOKIE['style']))
// Si le formulaire n'a pas été soumis, on vérifie si le cookie style existe et si tel est le cas on définit une variable $css correspondant à ce style
{
	$css = $_COOKIE['style'];
}	
else
// Si le cookie n'existe pas et que le formulaire n'a pas été soumis, on définit une variable $css correspondant au style par défaut, ici un_style.css par exemple
{
	$css = "defaut";
}
//code...
$site_root = 'http://mondomaine.ext/';
$style = '<link rel="StyleSheet" type="text/css" href="'.$site_root.'styles/'.$css.'/index.css" />';


Alors les infos cookies sont récupérées que sur la page du switch et non sur les autres... de plus je dois cliquer deux fois pour que le switch soit prit en compte... Smiley ohwell

Donc si quelqu'un a une idée...

Je vous remercie beaucoup.
Modifié par E²xiT (15 Sep 2005 - 22:19)
Salut,

Je pense que le problème ce trouve à ce niveau.
setcookie('style', $_POST['style'], time()+(365*24*3600));


Par défaut, le coockie prend le dossier de création comme dossier ou il sera actif.

je m'explique : si le coockie est créé dans le dossier /style/ il ne sera valable que pour /style/ et les sous-dossiers.

Pour y remédier, tu dois ajouter un nouveau paramètres à la fonction setcoockie, voici pour ton cas.

setcookie('style', $_POST['style'], time()+(365*24*3600), '/');


Cela va indiquer au coockie qu'il va fonctionner depuis la racine du site et tous ces sous-dossiers.

Bonne continuation.
C'est ok pour le cookie Smiley lol
Merci beaucoup !

Mais je ne comprends pas pourquoi je dois cliquer deux fois pour que le style change Smiley decu ...

Merci beaucoup.
C'est peut-être à cause du cache du naviguateur Internet, dans ce cas toutes les pages de ton site tu dois pas les mettres en caches.
Ben au fait, lorsque je clique la page, elle se recharge mais il faut que j'affiche une autre page pour que le style soit appliqué.
Je pense que c'est du à la variable $css qui est contenu dans la variable $style..
Il faut que la variable $style soit régénérée mais apparement elle ne peut pas le faire juste après la création du cookie.

Même si au lieu de mettre $_SERVER['PHP_SELF'] je mets une autre page, ça ne va pas :s
Faut que la variable se rerégénère... au fait il faudrait que la page se recharge deux fois pour le changement soit pris en compte Smiley decu

Rien ne permet de faire cela ??

Merci beaucoup Smiley smile
Bon j'ai fait une petite mise à jour :
if(isset($_COOKIE['style']))
{
$css = $_COOKIE['style'];
} 
else
{
setcookie('style', 'defaut', time()+(365*24*3600));
}

Voila, si le visiteur visite pour la première fois le site, il se créer un cookie mais je ne sais pas comment faire réactualiser la page après la création du cookie.
Quelqu'un à une idée ?

Petit rappel : cette page est incluse sur toutes les pages et elle est incluse avant la balise <html>.

Merci bien.
et c'est quoi la solution ?

j'utilise des cookies aussi et il y a également un probléme de réactualisation.

(c'est pas lié au tuto mais à une page perso).
Ben au fait, le chemin vers mon style était mauvais.
Moi mes styles sont contenus dans un dossier et un sous-dossier.
J'avais simplement mis le sous-dossier... donc, forcément, ça ne fonctionnait pas.

Donc, le code est celui-ci :
if(isset($_COOKIE['style']))//si le cookie existe
{
$css = $_COOKIE['style']; //recherche de la valeur du cookie
} 
else //sinon
{
setcookie('style', 'sub_directory/defaut', time()+(365*24*3600)); //création d'un cookie (pour la prochaine visite)
$css = 'sub_directory/defaut'; //mise en place du style par défaut (pour la visite courante)
}
//définition de la variable du nom de site (utile sur tu fais pas mal de liens avec l'adresse complète de ton site)
$site_root = 'http://mondomaine.ext/';
//et la ligne style :
<link rel="StyleSheet" type="text/css" href="<?php echo $site_root; ?>/styles/<?php echo $css; ?>/index.css" />


Et voila...
Bonne continuation Smiley cligne
Bonsoir,

J'ai essayé le script style-switcher, et il fonctionne très bien lorsqu'on met le fichier index.php et choix.php à la racine du site. Je place les différents styles dans les répertoires "simple,ocean et montagne".

Par contre maintenant si je veux rassembler ces 3 styles dans un répertoires "skins", ce ne fonctionne plus.

J'ai modifié la source pour qu'il aille dans "skins/$css/style.css
Mais là ça ne fonctionne plus. Je crois que le problème se trouve dans le href, mais je n'en suis pas plus certain.

Je suis débutant Smiley confused , et ne comprends pas encore toute la syntaxe.

Merci de votre aide. Smiley biggrin

Voici le code de mon fichier index.php.

Shoghi

<?php
if(isset($_POST['change_style']))
// On vérifie que le formulaire a été soumis
{
if(file_exists("./".$_POST['style']."/style.css"))
{
// On fait un cookie d'une année de durée pour garder en mémoire le style choisi et le récupérer à la prochaine visite

setcookie('style', $_POST['style'], time()+(365*24*3600), "/") ;
// Si le fichier *.css existe on définit une variable $css correspondant au style choisi
$css = $_POST['style'] ;
}
}
elseif(isset($_COOKIE['style']))
// Si le formulaire n'a pas été soumis, on vérifie si le cookie style existe et si tel est le cas on définit une variable $css correspondant à ce style
{
$css = $_COOKIE['style'] ;
}
else
// Si le cookie n'existe pas et que le formulaire n'a pas été soumis, on définit une variable $css correspondant au style par défaut, ici un_style.css par exemple
{
$css = "un_style" ;
}
?>




<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>

<?php
$skins="skins";

echo "<link rel=\"stylesheet\" type=\"text/css\" media=\"screen\" href=\" ".$skins." ".$css." /style.css\" />\n" ;
?>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Document sans titre</title>
</head>

<body>
<?php
include("choix.php");
?>
</body>
</html>
Ok, c'est résolu.

Désolé d'avoir écrit trop vite sur le phorum. J'avais parcouru tout "le service après-vente" mais rien trouvé. En faisant une recherche sur "switcher" j'ai trouvé mon bonheur.

Voici le code pour ceux à qui cela peut venir en aide.

Shoghi


<?php
if(isset($_POST['change_style']))
// On vérifie que le formulaire a été soumis
{
if(file_exists("./skins/".$_POST['style']."/style.css"))
{
// On fait un cookie d'une année de durée pour garder en mémoire le style choisi et le récupérer à la prochaine visite

setcookie('style', $_POST['style'], time()+(365*24*3600), "/") ;
// Si le fichier *.css existe on définit une variable $css correspondant au style choisi
$css = $_POST['style'] ;
}
}
elseif(isset($_COOKIE['style']))
// Si le formulaire n'a pas été soumis, on vérifie si le cookie style existe et si tel est le cas on définit une variable $css correspondant à ce style
{
$css = $_COOKIE['style'] ;
}
else
// Si le cookie n'existe pas et que le formulaire n'a pas été soumis, on définit une variable $css correspondant au style par défaut, ici un_style.css par exemple
{
$css = "un_style" ;
}
?>




<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>

<?php
echo "<link rel=\"stylesheet\" type=\"text/css\" media=\"screen\" href=\"./skins/".$css." /style.css\" />\n" ;
?>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Document sans titre</title>
</head>

<body>
<?php
include("choix.php");
?>
</body>
</html>