Pages :
Bonsoir,

Je suis en train de m'interresserer à ce fameux switch, depuis hier soir.
J'ai pris pour cela le tuto : Faire un Style switcher en php de ceux d'Alsacréations.
J'ai passé plusieurs heures à essayer de le faire marcher, mais je ne suis jamais parvenu à switcher entre deux styles.

J'ai crée trois feuilles de style pour un site, dont j'ai indiqué les valeurs dans le formulaire.
J'ai appelé mon style par défaut avec le <link rel> ou le @import, jusque là pas de problème...
J'ai inséré le code php dans ma page html. Question quand il est dit :
a écrit :
Nota Bene Il faut placer le script en tout début de page
, ca veut dire avant le DTD ou avant le contenu du body?
Enfin avec quelques -nombreux- essais, je n'ai pas réussi à m'en sortir, car à aucun moment finalement sauf dans le formulaire, je n'aurais spécifié qu'il existait mes feuilles de styles 2 et 3, la première étant définie par le <link rel> ou l'@import.

Ma question est donc, ou faut-il spécifier ces autres feuilles de style, ormis dans le formulaire de changement ? dans le code php, avec une importation de feuille de style "alternate" ??

Je trouve que le tutoriel est un peu vague sur ce point la malheureusement, et qu'il est du coup peu évident pour les quiches en php comme moi de s'en sortir avec les informations actuelles. (Je ne remets en aucun cas en doute le fait d'avoir fait un tutoriel, bien au contraire, mais je regrette juste un léger manque de clarté.)

Merci par avance de votre lecture et de vos réponses que je l'espère, m'apporteront la solution.
Modifié par Mikachu (30 Jul 2006 - 23:58)
Bonjour,

Pour switcher, il faut placer le cookie avant toute autre chose. C'est à dire avant le DOCTYPE et même avant le <html>.

Ce cookie va stocker les données du client et les conserver durant toute sa visite sur le site. c'est ce qui fera qu'en changeant de page il gardera la css choisie.
Tout à fait accessoirement, c'est cela le service après-vente internet. On fait un forum, on met des tuto et on laisse les membres se dépatouiller avec. Y'en a bien un qui répondra ! Service minimum !
Je ne connais qu'un seul forum où ils se décarcassent c'est http://forum.pcastuces.com.
Ca fait des mois que je traîne dessus et c'est le plus sympa et le plus réactif.

Soit dit en passant, ce tuto n'est pas mal fait.
Mais comme beaucoup de tuto on te dit pas ce qu'il faut adapter. T'es censé être un débutant mais on te dit pas ce qu'il faut faire.

Pour la déclaration de tes feuilles de style c'est dans la partie :

legend>Choisissez un style de page</legend>
<select name="style">
<option value="un_style" selected="selected">Un style</option>
<option value="un_autre_style">Un autre style</option>

<option value="encore_un_autre_style">Encore un autre style</option>
</select>
<input type="submit" name="change_style" value="Changer le style" />

Dans value tu dois mettre le chemin de ta feuille (attention au chemin relatif ou absolu)

Et à la place de "Un style" ou "Encore un autre" le nom que tu donnes au style (Robocop, neige en été, Alsacréation, ...)

Normalement tout doit baigner !

Bon courage
kong a écrit :
Tout à fait accessoirement, c'est cela le service après-vente internet. On fait un forum, on met des tuto et on laisse les membres se dépatouiller avec. Y'en a bien un qui répondra ! Service minimum !
Je ne connais qu'un seul forum où ils se décarcassent c'est http://forum.pcastuces.com.
Ca fait des mois que je traîne dessus et c'est le plus sympa et le plus réactif.

Soit dit en passant, ce tuto n'est pas mal fait.
Mais comme beaucoup de tuto on te dit pas ce qu'il faut adapter. T'es censé être un débutant mais on te dit pas ce qu'il faut faire.


MMmmm...

Ce n'est pas particulièrement de bon gout comme remarque :

1. l'appellation "service après vente" de la rubrique relève quand même un peu du second degré et rebondir là dessus au premier degré est très limite et quoiqu'il en soit désagréable.

2. Comme tu l'indiques toi même le tuto n'est pas mal fait (il est même carrément bien fait) et il aurait mieux valu partir de ça.

3. Je ne crois pas qu'il soit indiqué que ce tutoriel concerne les débutants. En fait rien n'est indiqué de ce point de vue et on pourrait effectivement se dire que c'est un peu dommage. Sauf qu'il n'y a aucune raison de considérer qu'un tutoriel en général soit une une prise en charge "dal niente" de ceux qui le consultent. A chacun aussi d'évaluer un minimum son niveau d'acquisition.
Bon ca marche toujours pas :S

Je vais expliquer le cas en code, vu que le php est pas visible via les navigateurs.

Le switch comprend l'utilisation de deux fichiers footer.php qui est ensuite incluse dans 2006-04.php
Mon arborescence est comme ca :

Smiley racine /*contient 2006-04.php et footer.php*/
|
|--[CSS]
.......|------ Smiley standard /*contient style.css*/
.......|------[sans_style] /*contient style.css*/
.......|------[noir_et blanc] /*contient style.css*/

(Les points ne représentent rien ils sont juste la pour simuler le décalage)

Voilà mes codes :
le formulaire inséré dans footer.php


    <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/" selected="selected">Standard</option>
	<option value="css/noir_et_blanc/">Noir et blanc</option>
	<option value="css/sans_style">Sans style</option>
	</select>
	<input type="submit" name="change_style" value="Changer le style" />
	</fieldset>
	</form>
</div>


le code php inséré dans 2006-04.php avant le DTD :
<?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/" ;
}
?>


le code php situé dans le fichier 2006-04.htm entre les balises <head></head>

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


Que dois donc faire pour atteindre mes feuilles de styles avec le switch ?

Merci par avance pour vos réponses.
Modifié par Mikachu (24 Jun 2006 - 11:12)
MMmmm...

C'est une considération générale qui n'affecte pas Alsacréation particulièrement. Et comme tu le dis, Si il pleut, il pleut !
Et un chat c'est un chat !

Quant à premire degré et deuxième degré je vois pas la différence lorsqu'ON laisse à penser que l'on va trouver une aide sur ce tuto particulièrement et que rien ne vient (Forum spécifique aux tuto !). Cette appellation fait penser au premier degré comme au deuxième à un "service" particulier concernant cette rubrique spécifique. Pas à une prise en charge "dal niente". Son existence et l'invitation à s'y rendre fait bien penser que l'on va y trouver une réponse ?????

Je te félicite de trouver ce tuto "remarquablement bien fait" mais michaku n'a pas l'air d'être de ton avis. Et pas mal d'autres si j'en juge les post à ce sujet et au sujet de bien d'autres tuto. Non pas qu'il soi(en)t mal fait mais pas forcement bien compris par tout le monde.
Et si l'invite à poster sur ce forum existe c'est bien qu'une telle éventualité ait été envisagée.
Je suis toujours surpris de voir que l'on exige beaucoup de autres sans vouloir se donner suffisemment la peine de donner soi même.
Je fais remarquer également que si j'ai rebondi sur le mécontentement de Michaku j'ai essayé de lui apporter quelques élements de réponse.

Enfin, je pense que c'est surtout ce qu'il attendait et non pas un MMmmm... stérile.
To do is to Be ! That is the answer !

Le reste, Michaku (je suppose) et moi même n'en avons rien à cirer.
Faites du premier degré ou du deuxième degré si vous voulez mais une p'tite réponse sympa type "service après-vente" serait du meilleur gout
Mmmmh merci de t'intéresser à mon cas, mais ne présuppose pas de mes pensées je te prie, car je n'ai rien contre Alsa qui m'a apporté énormément en peu de temps. Il y'a encore quelques mois le concept d'accessibilité et de séparation de fond et de forme m'étais totalement étranger.
Et au contraire de tes suppositions, la réaction sur ce forum est assez rapide en général, et il n'y aurait pas mort d'hommes si la réponse n'arrivait que le lendemain ou le surlendemain. J'ai posté ma question à 19h, pas de raison de s'alarmer à 20h30...
Si pour toi rapide veut dire instantané, effectivement ca va te choquer.

Je n'ai pas spécialement critiqué le fait que ce tuto soit bien fait ou mal fait, il a déja le mérite d'exister, c'est mieux que rien. Seulement, là ou quelqu'un qui s'y connait en php aurait compris depuis longtemps, moi je peine un peu pasque le php est nouveau pour moi, et encore assez abstrait...
Le HTML pas de soucis, il est simple de regarder les codes sources et d'en comprendre l'application. S'il existait une manière de le faire avec le php, j'en serais le premier content, car j'apprendrai ca super vite, mais "qui dit côté serveur dit pas pas visible".

Mais je ne veux pas entrer dans un débat concernant ce sujet, j'ai ouvert ce post pour avoir une réponse à une question technique, et non pour ouvrir un débat sur un sujet d'un tout autre ordre.
Modifié par Mikachu (24 Jun 2006 - 01:11)
Toutes mes excuses.
Je n'ai rien non plus contre Alsa.
Si je puis t'aider ce sera avec le plus grand plaisir et sans arrière pensée ...
... après une bonne nuit qui porte conseil.

Bonne nuit.
Juste avant de foncer au lit je te joints un tuto pour installer et configurer easyphp qui te permet de visualiser ton travail en local sans publier sur ton ftp.
http://www.siteduzero.com/tuto-3-132-1-presentation-de-mysql.html#ss_part_1
En ce qui me concerne, je fais une copie de mon site dans un nouveau fichier et je travaille uniquement sur celui la en le visualisant sous easyphp. Lorsque je suis satisfait, je transfère mes pages dans le fichier original et le publie ensuite.
Cela permet de faire tous les essais nécessaires avant publication.
sans compter que si tu as FF, easyphp ouvrira avec FF et dans FF il y a une extension IE qui permet de visionner sous les deux navigateurs (pour corriger les bugs d'IE).
Euh non non, c'est le bon post mais ce doit être la fatigue.

Je regarderai mieux ton code demain si t'as pas eu la soluce.
Bon c'est intéressant ton lien, mais ca me semble un peu loin de ce que je recherche :o
Je veux juste faire un style switcher, pas une usine à gaz avec une base de données. Le tuto du site du zéro m'a un peu fait peur en réalité, car il me semble bien lourd pour si peu de choses. Et comme celui d'Alsa semble marcher, même si je ne sais pas encore comment, j'aimerai bien utiliser celui la autant que possible.
Modifié par Mikachu (24 Jun 2006 - 01:39)
J'ai mieux regardé ton code à la fraîche ...

Tes css sont enregistrées sous la form style1.css. Ils faut donc que tu les appelles avec leur extension dans ton cookie $css="" et dans ton formulaire (value="").

Si tes css sont dans un dossier il faudra leur donner le chemin comme cela : mon_dossier/style1.css

ATTENTION cela peut fonctionner el local mais pas sur ton ftp. Ce sera alors : http://mon_site/mon_dossier/style1.css

Enfin dans ton link, il semble manquer un /
Selon moi ce serai : /style.css\ et non pas style.css\

ATTEntion à bien enregsitrer tes css en minuscule et avec underscore par ex noir_et_blanc.css

Si j'étais toi je créerai 3 variables du type
$style1="mon-dossier/noir_et_blanc.css"
et je mettrai ces variables dans mes values=""
S'il y avait des changements à apporter cela serait plus pratique.

Bon courage.
Salut et merci,

Je comprends dans le principe ce qu'il faut faire, mais concrètement... ben tu me dit beaucoup de choses, mais je ne sais pas ou et comment les appliquer. Et je trouve certaines contradictoires. Bref tout ca pour dire que je comprends pas.
J'aimerai une explication plus concrète.

Le tuto disait :
a écrit :
Les valeurs de value ont été choisies arbitrairement, vous devrez créer un dossier par style portant le nom correspondant à la valeur de l'attribut value et nommer le fichier css, style.css

J'ai respecté scrupuleusement, si malgré tout on est pas obligé de faire un sous répertoire moi ca m'arrange, je préfère avoir mes 3 fichiers dans répertoire [CSS] et avec des noms différents. Mais je sais pas comment faire, vu que j'y arrive déja pas avec les répertoires.

Voilà, désolé de pas comprendre, mais je rappelle que je suis débutant en PHP, et je n'ai donc pas le même niveau de compréhension car même si j'ai bien compris le principe, je connais pas bien le langage et c'est assez pénalisant.

Merci d'avance à tout ceux qui se pencheront sur mon cas.
Modifié par Mikachu (24 Jun 2006 - 11:18)
T'excuse pas, on reprend.


Sur mon site j'ai un switch de css qui gère 36 css différentes par l'intremédiare d'une Bdd. On va donc s'en sortir.

Premièrement :
Tu enregistres tes css sous la forme style1.css (ou noir_et_blanc.css) etc, etc.

Deuxio tu mets soit tes css dans un dossier soit tu les laisses à la racine du site (seul le chemin pour les appeler changera).

Troisio ...
Tu mets :
SI TES css sont à la racine :
dans Standard : value="standard.css"
dans Noir et Blanc : value ="noir_et_blanc.css"
et dans Sans Style : value ="sans_style.css"

SI TES css sont dans un dossier :
value="mon_dossier/standard.css"
etc.
On continue ???

Dans ta condition préliminaire au dessus de ta DCT tu as :

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

Tu dois donc indiquer ici que si rien n'est choisit, c'est la css Standard qui s'applique.

donc : $css="standard.css" (ou $css="mon_dossier/standard.css")
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.
Pages :