Pages :
(reprise du message précédent)

Ca j'ai compris, et j'avais déja fait cette modification. Je cherche maintenant à pouvoir avoir un accès à mes autres feuilles de style lorsque j'en sélectionne une dans le menu déroulant et que je valide le changement.
Enfin,
renommes ta page 2006-04.htm en 2006_04.htm.
Evite toujours les tirets, les majuscules et les espaces dans un nom de page, de dossier, de fichier ou d'image. Préfère l'underscore ( _ )

Donc dans le Link de ce fichier change le href avec celui là.
href=\"".$css."/style.css\"

Tout doit maintenant être correct Smiley ravi sauf si le link n'est pas au bon endroit (Moi je l'aurai mis sous le DCT avant </head>).

Enfin et cela m'est déjà arrivé; il se peut qu'il faille indiquer les chemins complets vers la css si elle est dans un dossier.
soit : http://mon_site/mon_dossier/ma_css.css

Une petite heure et t'es en route Smiley langue .

Je reviens un peu plus tard voir si tout va bien.
??????????

Si tu as bien changé les values et la variable $css, lorsque tu cliques sur un des choix puis que tu fais envoi, ta css selectionnée doit se substituer à celle en cours. C'est le propre de ce script.
Bon j'ai désormais :

formulaire :

<div id="style_switcher">
<form method="post" action="<?php $_SERVER['PHP_SELF'] ?>">
<fieldset>
<legend>Choisissez un style de page</legend>
<select name="style">
<option value="css/standard.css" selected="selected">Standard</option>
<option value="css/noir_et_blanc.css">Noir et blanc</option>
<option value="css/sans_style.css">Sans style</option>
</select>
<input type="submit" name="change_style" value="Changer le style" />
</fieldset>
</form>
</div>


<?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 = "/css/standard.css" ;
}
?>


et

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


Mais quand j'ouvre ma page aucune CSS n'est chargée et dans le code le php a spécifié ceci :

<link rel="stylesheet" type="text/css" media="screen" href="/css/standard.css/style.css" />

Or le vrai lien serait

<link rel="stylesheet" type="text/css" media="screen" href="/css/standard.css" />


Je ne sais pas pourquoi il ajoute ce "/style.css" à la fin...
Et au final ca marche pas.
Modifié par Mikachu (24 Jun 2006 - 16:34)
Bon je viens de faire une correction pour obtenir au moins le chargement de la CSS par défaut.



<select name="style">
<option value="css/standard" selected="selected">Standard</option>
<option value="css/noir_et_blanc">Noir et blanc</option>
<option value="css/sans_style">Sans style</option>



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 = "css/standard" ;
}

et


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


Avec ca ma feuille standard.css est chargée au démarrage.
Seulement, quand je choisis un design dans le menu déroulant, rien ne change, et le code indique :
<link rel="stylesheet" type="text/css" media="screen" href=".css"/>

preuve en est donc qu'il ne va jamais récupérer la valeur indiquée dans le formulaire, car s'il la prenait, il me donnerai le lien suivant
<link rel="stylesheet" type="text/css" media="screen" href="css/noir_et_blanc.css"/>

par exemple.

Que faire ?
Modifié par Mikachu (24 Jun 2006 - 16:45)
Tu as raison, cette dernière partie est inutile. Il te suffit de mettre dans le href="$css" (c'est la variable qui contient le chemin vers la css.

j'ai vu aussi une autre ligne dans le php qu'il faut modifier :

if(file_exists("./".$_POST['style']."/style.css"))

Je regarde avec le tuto

Ah, dans ton php met plutot $css=css/standard.css
href=\"$css\" << ca plutot non ? il faut bien mettre les anti slashes pour éviter que la chaine ne soit stoppée par le " c'est bien ca ?

En même temps je suis super content, j'arrive plus à rentrer sur mon site, j'ai une erreur "500 Internal Serveur Error", merci free des fois Smiley ohwell
Modifié par Mikachu (24 Jun 2006 - 17:00)
Ah ca remarche... Donc avec ces modifications, du coup, quand je change de style j'obtiens le lien vers la CSS suivant :

<link rel="stylesheet" type="text/css" media="screen" href="" />

Donc toujours pas de lien vers les autres feuilles. Et même si je choisis "standard" dans la liste déroulante, elle ne se recharge pas comme au démarrage de la page.
Oui pour les \

J'ai l'habitude de coder avec echo et les ' ' et non pas les " ". Ca évite les nombreux \


C'est normal que pour le moment ta css ne charge pas car la condtion n'est pas remplie pour charger le cookie.

essaie dans la ligne IF file_exist de remplacer style.css par css

En fait il ne reste plus qu'à lui dire : Si la variable renvoyée par le formulaire ($_POST) existe dans le dossier X, place le cookie et attribue à $css la valeur de de $_POST (celle que renvoie le formulaire).

On pourrait tout aussi bien lui dire si la variable renvoyèe n'est pas nulle (formulaire validé sans choix préalable) place le cookie et attribue lui ...
a écrit :
essaie dans la ligne IF file_exist de remplacer style.css par css

à quoi ca correspond d'ailleurs cette valeur ?

a écrit :
En fait il ne reste plus qu'à lui dire : Si la variable renvoyée par le formulaire ($_POST) existe dans le dossier X, place le cookie et attribue à $css la valeur de de $_POST (celle que renvoie le formulaire).

Dans la théorie j'ai compris comment ca marche mais dans la pratique je ne sais pas comment le coder, avec des if else et else if je suppose, mais en pratique, je sais même pas comment récupérer les valeurs de mon formulaire.
La récupération de ta css choisie se fait par le submit du formulaire.

Lorsque tu choisis une valeur et que tu fais Envoyer une variable $_POST est créée qui contient la valeur choisie et la page se recharge.

Elle lit donc les instructions du début (le php).

Il dit 1) Si $_POST existe ...
ET Si la valeur de $_POST existe dans le fichier css
Place un cookie nommé 'style' et stocke la valeur de $_POST
Alors la valeur de $css égale celle de $_POST
2) Si $_POST n'existe pas encore mais que le cookie à une valeur stokée
la variable $css égale alors la valeur stockée dans le cookie
3) Si $_POST n'existe pas encore et si aucune valeur n'est stockée dans le cookie alors $css égale une valeur par défaut que tu lui attribue.

En ce qui concerne style.css, ce serait le fichier dans lequel sont stockées les feuilles css. Ce n'est pas très clair dans le tuto.
OK,

En fait dans le tuto ils mettent les feuilles de sytle dans un dossier (un dossier par feuille de style et chaque feuille de style porte le même nom). Si tu as quatre feuilles de styles il te faut 4 dossiers avec des noms différents pour les contenir.

Dans value tu met nom pas le chemin vers la feuille de style mais seulement le chemin vers le dossier.

Enfin, dans le IF de file_exist tu dis que $_POST est le nom du dossier et que style.css est le nom de la feuille de style contenue dedans.
Ce que tu demandes par là c'est SI la feuille de style style.css existe dans le dossier $_POST alors, place un cookie.

Understand ?????
Ce qui fait que tu es libre de mettre tous tes ficheirs ccs dan des dossiers différents et suivre la méthode. Ou juste modifier ta ligne IF pour changer la condition en IF le fichier noir_et_blanc.css existe dans mon dossier css alors place le cookie.
/css/$_POST au lieu de /$_POST/css comme actuellement.

désolé j'avais pas vu cette ligne là au début. C'est elle qui fait comprendre le cheminement.
Bon c'est bon ca marche pas... je laisse tomber... 48h que je suis sur ce truc et ca marche toujours pas, donc ca marchera jamais... Merci quand même.
Modifié par Mikachu (24 Jun 2006 - 20:09)
Bonsoir Mikachu

Ne dédéspère pas. Essaye le code ci-dessous :


<?PHP

if(isset($_POST['changer_style']))
// On vérifie que le formulaire a été soumis
{
	if(file_exists("./styles/".$_POST['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 = "beige";
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<link rel="stylesheet" type="text/css" href="styles/<?=$css?>.css" />
</head>
<body>
     <form method="post" action="<?=$_SERVER['PHP_SELF']?>">
          <input type="submit" name="changer_style" value="Changer de style" />
		<select name="style">
			<option value="beige">Beige</option>
			<option value="bleu">Bleu</option>
			<option value="noir">Noir</option>
			<option value="rouge">Rouge</option>
			<option value="vert">Vert</option>
			<option value="violet">Violet</option>
		</select>
     </form>
</body>
</html>

Modifié par pilate68 (28 Jun 2006 - 23:21)
Bonjour,

pilate68 a écrit :

Désolé, je ferais plus attention la prochaine fois.

Tu peux même éditer ton message pour corriger le problème, ce sera encore mieux Smiley ravi
Je viens d'essayer le code donné par pilate pour réaliser un petit switchstyler et ça marche parfaitement.

Quelques petites préçisions concernant ce code (des petites questions que je me suis moi même posés) :

Dans cet exemple, il faut nommer son dossier, là où on aura toute ses feuilles de styles, le dossier "styles"

Ensuite on nomme les feuilles de styles comme bon nous semble dans ce dossier. (j'avais utilisé une autre façon de faire avant avec des fichiers du même nom dans des dossiers séparés et je trouvais ça moins pratique). Ici par exemple donc "beige" "bleu" "noir" etc.... avec l'extension .css bien sûr.

Ensuite on appelle sous un nom d'affichage sur le site chaque style. Peu importe, vous mettez ce que vous voulez : ici en l'occurence : "Beige" Bleu" "Noir"

Voilà en esperant que Mikachu se sortira de ce pétrin informatique Smiley murf



Pour ma part j'aimerais savoir si ce n'est pas aussi faisable de simplifier les feuilles de styles en mettant 4 fichiers css avec seulement les lignes css qui changent.
Mais surtout permettre qu'en même temps une feuille de style séparé et global soit commune au 4 autres styles. Je sais pas si je suis très clair mais en fait je voudrais simplifier mes mises à jour du code css en isolant uniquement les parties changeantes sur des feuilles de styles bien séparés.

http://www.meteobell.com/Meteobell_vs_2/Template_17.php
Salut

a écrit :
Pour ma part j'aimerais savoir si ce n'est pas aussi faisable de simplifier les feuilles de styles en mettant 4 fichiers css avec seulement les lignes css qui changent.
Mais surtout permettre qu'en même temps une feuille de style séparé et global soit commune au 4 autres styles

C'est tout à fait faisable. Il suffit pour cela d'utiliser 2 balises <link /> pour appeller les styles. Par exemple :
/* Partie commune */
<link rel="stylesheet" type="text/css" href="css/common.css" media ="screen" />
/* Partie modifiable par le styleswitcher */
<?php ... ?>
Ok merci ça c'est une bonne nouvelle. Smiley biggrin

J'ai une dernière question.

Est-ce que les cookies générés avec ce code sont valables d'une page à l'autre sans avoir besoin à chaque page différente de devoir spécifié quel style je veux ? Car si j'enlève les boutons <form> sur ma page "webmaster" ou "affichage" par exemple et ne met que le code PHP au-dessus et la balise link avec le petit code, mon style reste sur la position par défaut, même si j'ai spécifié un autre style sur la page d'accueil d'avant... Smiley ohwell

Y'a pt'être une merdouille dans mon code je sais pas.

EDIT : Ok non c'est bon, y'avait bien une merdouille dans mon code, ca marche maintenant Smiley biggrin



Juste une préçision, sur une autre façon de faire. Je crois d'ailleurs que ça ressemble un peu à ce que propose le tuto de Alsa. (je me demande d'ailleurs concretement quels sont les avantages/inconveniants - dans le classement je suppose - entre ces 2 méthodes).

Ici donc, 1 fichier "styles" et toutes nos css diféérents dedans.

Si vous voulez plutôt avoir des fichiers css séparés par dossiers (1 feuille de style par dossier) vous devez nommés vos fichiers css tous exactement de la même façon "style.css" par exemple. Vos dossiers par contre vous les nommez comme bon vous semble.

Et vous remplacez cette partie du code :

<?PHP

if(isset($_POST['changer_style']))

// On vérifie que le formulaire a été soumis
{
	[#red]if(file_exists("./styles/".$_POST['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 = "clair";
}

?>


par

if(file_exists("./".$_POST['style']."/style.css"))



De même vous remplacez cela :

<link rel="stylesheet" media="screen" type="text/css" href="styles/<?=$css?>.css" />


par cela :

		<!--Code PHP  pour le SwitchStyler. Permet d'avoir l'habillage (affichage, style, résolution) du site souhaité -->
		<?php
echo "		<link rel=\"stylesheet\" type=\"text/css\" media=\"screen\" href=\"".$css."/style.css\" />\n" ;
?>


Pour le bouton ca doit être pareil je pense...

Sinon moi j'avais fait cela en ouvrant préalablement un petit pop-up centré sur ma page d'Accueil.

 <script language="javascript">
function OpenCenterPopUp()
{    
    var Left=window.screen.width/2-175;
    var Top=window.screen.height/2-175;
    //Videment faut modifier la config!!
   var Configuration="'toolbar=0, menubar=0, location=0, directories=0, status=0, scrollbars=0, resizeable=0, copyhistory=0, menuBar=0, width=450, height=250, left=" + Left + ", top=" + Top;
    window.open('style_reso.php','Résolution',Configuration);return(false)
}
</script>


Et cela dans la console de changement d'affichage :


<body id="style_switcher" onload="window.opener.location.reload(true);">

<div id="afficher_style">
	<form method="post" action="<?php $_SERVER['PHP_SELF']; ?>">
		<fieldset>

			<legend>Style d'Affichage du site MétéOBell : </legend>
			<select name="style">
				<option value="Style_Reso_clair" selected="selected">Clair (par défaut).</option>
				<option value="Style_Reso_sombre">Sombre</option>				
			</select>
			<input type="submit" name="change_style" value="Actualiser les Changements" >
		</fieldset>
	</form>

</div>
<div id="fermer_style">
<a href="#" onclick="window.open('index.php','','fullscreen,scrollbars');return(false)">Cliquez ici pour consulter le site en plein écran (reccomandé)</a>

<form>
<input type="button" value="Fermer cette Fenêtre" onclick="window.close();">
</form>
</div>
 
	
	</body>
</html>



Mais j'ai abandonner l'idée, car trop compliqué, et ça ne marchait pas 1 fois sur 5, au niveau de la réactualisation auto. En passant par un pop-up, c'était plus difficile évidemment lol.
Modifié par Damonya (13 Aug 2006 - 20:40)
Pages :