Feuilles de style variables
Résolu/Fermé
katadrapata
Messages postés
13
Date d'inscription
samedi 21 octobre 2006
Statut
Membre
Dernière intervention
25 octobre 2006
-
21 oct. 2006 à 13:58
Ssylvainsab Messages postés 2884 Date d'inscription samedi 29 juillet 2006 Statut Modérateur Dernière intervention 15 août 2020 - 26 oct. 2006 à 18:10
Ssylvainsab Messages postés 2884 Date d'inscription samedi 29 juillet 2006 Statut Modérateur Dernière intervention 15 août 2020 - 26 oct. 2006 à 18:10
A voir également:
- Feuilles de style variables
- Style word - Guide
- Photo de profil stylé - Guide
- Fusionner feuilles excel - Guide
- Nom de profil facebook stylé - Guide
- Feuille de pointage excel - Télécharger - Tableur
26 réponses
Ssylvainsab
Messages postés
2884
Date d'inscription
samedi 29 juillet 2006
Statut
Modérateur
Dernière intervention
15 août 2020
825
21 oct. 2006 à 14:58
21 oct. 2006 à 14:58
Bonjour.
C'est très facile en php.
Il y a peut être unmoyen de rajouter automatiquement "?style=xxx" automatiquement aux liens mais je en le connais pas.
Par contre, ca peut se faire avec les sessions.
Quand on choisit un design, il suffit de créer une variable de session qui contiendra le nom de la feuille de style.
Sur chaque page, tu inclus un lien vers les différent desgin :
<a href="?design=1">Design 1</a><a href="?design=2">Design 2</a>
etc...
A la place des chiffres met les noms de tes fichiers sans l'extension .css
Ensuite, sur chaque page, tu regardes si il y a une variable apellée design et si oui tu crées une variable de session avec la valeur correspondante.
Ce qui donnera :
Ensuite, dans le code html, tu fais ceci :
a plus
C'est très facile en php.
Il y a peut être unmoyen de rajouter automatiquement "?style=xxx" automatiquement aux liens mais je en le connais pas.
Par contre, ca peut se faire avec les sessions.
Quand on choisit un design, il suffit de créer une variable de session qui contiendra le nom de la feuille de style.
Sur chaque page, tu inclus un lien vers les différent desgin :
<a href="?design=1">Design 1</a><a href="?design=2">Design 2</a>
etc...
A la place des chiffres met les noms de tes fichiers sans l'extension .css
Ensuite, sur chaque page, tu regardes si il y a une variable apellée design et si oui tu crées une variable de session avec la valeur correspondante.
Ce qui donnera :
<?php //a mettre AVANT tout code html !! session_start //si on a choisi le design 1 if $_GET['design']==1 { $_SESSION['design']=1; } //si c'est le 2 elseif $_GET['design']==2 { $_SESSION['design']=2; } //on fait ca pour chaque design //si aucun design n'est choisi, //on crée une variable de session avec la valeur par défaut. //il ne faudra pas oublier de vérifier l'existence de cette variable. else { $_session['design']=defaut; }
Ensuite, dans le code html, tu fais ceci :
<link rel="stylesheet" media="all" href="/css/<?php echo $_SESSION['design'];?>.css" />
a plus
katadrapata
Messages postés
13
Date d'inscription
samedi 21 octobre 2006
Statut
Membre
Dernière intervention
25 octobre 2006
21 oct. 2006 à 18:18
21 oct. 2006 à 18:18
Ca a l'air magique, et c'est exactement ce qu'il me faut... Sauf que le code n'est pas bien digéré, apparemment : après avoir procédé aux modifications, je me retrouve avec l'erreur :
Parse error: parse error, unexpected T_IF in /homepages/5/d161669477/htdocs/inc-public.php3(53) : eval()'d code on line 3
...il doit y avoir une solution simple... Merci beaucoup en tout cas :-)
EDIT j'ai placé le code <php> avant la balise <html> de la page
Parse error: parse error, unexpected T_IF in /homepages/5/d161669477/htdocs/inc-public.php3(53) : eval()'d code on line 3
...il doit y avoir une solution simple... Merci beaucoup en tout cas :-)
EDIT j'ai placé le code <php> avant la balise <html> de la page
Ssylvainsab
Messages postés
2884
Date d'inscription
samedi 29 juillet 2006
Statut
Modérateur
Dernière intervention
15 août 2020
825
21 oct. 2006 à 19:47
21 oct. 2006 à 19:47
unexpected T_IF
Ca veut dire qu'il y a une condition qui n'y a rien a y faire.
Tu as sans doute mal placé une accolade.
Donnes nous ton code, c'est beaucoup plus facile.
a plus
Ca veut dire qu'il y a une condition qui n'y a rien a y faire.
Tu as sans doute mal placé une accolade.
Donnes nous ton code, c'est beaucoup plus facile.
a plus
katadrapata
Messages postés
13
Date d'inscription
samedi 21 octobre 2006
Statut
Membre
Dernière intervention
25 octobre 2006
21 oct. 2006 à 20:28
21 oct. 2006 à 20:28
Ben j'ai remis exactement ton code magique :
<?php
session_start
if $_GET['design']==1
{
$_SESSION['design']=1;
}
elseif $_GET['design']==2
{
$_SESSION['design']=2;
}
else {
$_session['design']=defaut;
}
et après ça enchaîne sur <html><head> etc...
J'ai essayé avec une balise php> pour fermer mais ça ne marche pas ?..
<?php
session_start
if $_GET['design']==1
{
$_SESSION['design']=1;
}
elseif $_GET['design']==2
{
$_SESSION['design']=2;
}
else {
$_session['design']=defaut;
}
et après ça enchaîne sur <html><head> etc...
J'ai essayé avec une balise php> pour fermer mais ça ne marche pas ?..
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Ssylvainsab
Messages postés
2884
Date d'inscription
samedi 29 juillet 2006
Statut
Modérateur
Dernière intervention
15 août 2020
825
21 oct. 2006 à 20:43
21 oct. 2006 à 20:43
Ah !
Je vois !!
C'est parce que j'ai oublié les parenthèse.
Il faut utiliser session_start();
Voila
Pour retenir, quand on utilise une fonction, il y a toujours des parenthèses.
désolé pour cette erreur.
a plus
Je vois !!
C'est parce que j'ai oublié les parenthèse.
Il faut utiliser session_start();
Voila
Pour retenir, quand on utilise une fonction, il y a toujours des parenthèses.
désolé pour cette erreur.
a plus
katadrapata
Messages postés
13
Date d'inscription
samedi 21 octobre 2006
Statut
Membre
Dernière intervention
25 octobre 2006
22 oct. 2006 à 16:09
22 oct. 2006 à 16:09
Oui mais non... Avec le code
<?php
session_start();
if $_GET['design']==1
{
$_SESSION['design']=1;
}
elseif $_GET['design']==2
{
$_SESSION['design']=2;
}
else {
$_session['design']=defaut;
}
Avant ma première balise <html>, en haut de page, j'ai toujours une erreur
Parse error: parse error, unexpected T_VARIABLE, expecting '(' in /homepages/5/d161669477/htdocs/inc-public.php3(53) : eval()'d code on line 3
...il doit encore y avoir une faute de syntaxe. Sinon, je suis sûr que ça devrait marcher impec.
<?php
session_start();
if $_GET['design']==1
{
$_SESSION['design']=1;
}
elseif $_GET['design']==2
{
$_SESSION['design']=2;
}
else {
$_session['design']=defaut;
}
Avant ma première balise <html>, en haut de page, j'ai toujours une erreur
Parse error: parse error, unexpected T_VARIABLE, expecting '(' in /homepages/5/d161669477/htdocs/inc-public.php3(53) : eval()'d code on line 3
...il doit encore y avoir une faute de syntaxe. Sinon, je suis sûr que ça devrait marcher impec.
Ssylvainsab
Messages postés
2884
Date d'inscription
samedi 29 juillet 2006
Statut
Modérateur
Dernière intervention
15 août 2020
825
22 oct. 2006 à 18:41
22 oct. 2006 à 18:41
C'est pas mon jour aujourd'hui :
J'éspère que ca va marcher cette fois ci.
a plus
EDIT : Ah oui !
et comme tes noms de design ne seront surement pas des chiffres, n'oublie pas de mettre des apostrophes autour du nom :
$_session['design']='1';
Je t'ai mis le bon code partout, tu n'as qu'a copier coller.
<?php session_start(); if ($_GET['design']=='design1') { $_SESSION['design']='design1'; } elseif ($_GET['design']=='design2') { $_SESSION['design']='design2'; } else { $_SESSION['design']='defaut'; } ?>J'ai oublié les parenthèses.
J'éspère que ca va marcher cette fois ci.
a plus
EDIT : Ah oui !
et comme tes noms de design ne seront surement pas des chiffres, n'oublie pas de mettre des apostrophes autour du nom :
$_session['design']='1';
Je t'ai mis le bon code partout, tu n'as qu'a copier coller.
katadrapata
Messages postés
13
Date d'inscription
samedi 21 octobre 2006
Statut
Membre
Dernière intervention
25 octobre 2006
22 oct. 2006 à 20:40
22 oct. 2006 à 20:40
Merci beaucoup pour ton aide ! :))
La fonction passe très bien, on avance. Ca m'a donné l'occasion de creuser la déclaration de fonction et les variables en php...
En revanche les liens ne marchent pas : une adresse comme
partage_rub.php3?id_rubrique=3
devient
partage_rub.php3?design=style2
quand on clique sur le style 2, du coup ça fait sauter tous les contenus des rubriques ; et puis surtout, le changement de design n'est pas pris en compte.
Est-ce qu'il pourrait par exemple y avoir un conflit entre php3 (spip) et php ? Peut-il y avoir plusieurs variables ?xxx=xxx dans une adresse ?...
La fonction passe très bien, on avance. Ca m'a donné l'occasion de creuser la déclaration de fonction et les variables en php...
En revanche les liens ne marchent pas : une adresse comme
partage_rub.php3?id_rubrique=3
devient
partage_rub.php3?design=style2
quand on clique sur le style 2, du coup ça fait sauter tous les contenus des rubriques ; et puis surtout, le changement de design n'est pas pris en compte.
Est-ce qu'il pourrait par exemple y avoir un conflit entre php3 (spip) et php ? Peut-il y avoir plusieurs variables ?xxx=xxx dans une adresse ?...
katadrapata
Messages postés
13
Date d'inscription
samedi 21 octobre 2006
Statut
Membre
Dernière intervention
25 octobre 2006
23 oct. 2006 à 11:36
23 oct. 2006 à 11:36
J'y suis. Ca marche presque !
Je n'ai pas encore résolu le problème des liens (il faut que j'aie un lien du type <a href="x.php3?id_rubrique=x?design=x"> or ça n'est pas digéré, pour l'instant j'utilise juste <a href="x.php3?design=x">, ça fait sauter le contenu de la rubrique, mais au moins ça prend en compte la variable. Il doit y avoir un problème de syntaxe.
Mais surtout le problème c'est que la dernière condition
else {
$_session['design']=defaut;
}
efface systématiquement la valeur de "design" quand on circule dans les pages et qu'il n'y a plus rien à récupérer en GET. Il faudrait en faire une condition du type
elseif ($_GET['design']=='rien du tout')
{
$_SESSION['design']='design1';
}
Or je ne sais pas faire, tu as une idée ? Merci beaucoup pour ton aide et ton temps passé à me répondre ! Ca n'a pas de prix...
Je n'ai pas encore résolu le problème des liens (il faut que j'aie un lien du type <a href="x.php3?id_rubrique=x?design=x"> or ça n'est pas digéré, pour l'instant j'utilise juste <a href="x.php3?design=x">, ça fait sauter le contenu de la rubrique, mais au moins ça prend en compte la variable. Il doit y avoir un problème de syntaxe.
Mais surtout le problème c'est que la dernière condition
else {
$_session['design']=defaut;
}
efface systématiquement la valeur de "design" quand on circule dans les pages et qu'il n'y a plus rien à récupérer en GET. Il faudrait en faire une condition du type
elseif ($_GET['design']=='rien du tout')
{
$_SESSION['design']='design1';
}
Or je ne sais pas faire, tu as une idée ? Merci beaucoup pour ton aide et ton temps passé à me répondre ! Ca n'a pas de prix...
katadrapata
Messages postés
13
Date d'inscription
samedi 21 octobre 2006
Statut
Membre
Dernière intervention
25 octobre 2006
23 oct. 2006 à 11:41
23 oct. 2006 à 11:41
j'ai trouvé ne solution alors je me réponds tout seul ;)
j'ai ajouté une condition
elseif ($_SESSION['design']=='2') {$_SESSION['design']='2';}
du coup la variable n'est pas réinitialisée... je continue
j'ai ajouté une condition
elseif ($_SESSION['design']=='2') {$_SESSION['design']='2';}
du coup la variable n'est pas réinitialisée... je continue
Ssylvainsab
Messages postés
2884
Date d'inscription
samedi 29 juillet 2006
Statut
Modérateur
Dernière intervention
15 août 2020
825
23 oct. 2006 à 20:41
23 oct. 2006 à 20:41
Est-ce qu'il pourrait par exemple y avoir un conflit entre php3 (spip) et php ? Peut-il y avoir plusieurs variables ?xxx=xxx dans une adresse ?...
oui.
Si tu veux plusieurs variables get, il faut mettre une esperluette &
<a href="?design=flash&rubrique=4">cliquez ici</a>
Mais le problème, c'est que tu ne sais pas si l'url contient déja une variable get ou pas.
donc je ne sais pas si ca marche si une adresse est du genre :
index.php&design=15
Je vais essayer.
Sinon, tu peux essayer en regardant si il y a déja une variable get.
Si on écrit :
$les_variables_get=$_GET[];
la variable $les_variables_get devient égale au contenu de toutes les variables get.
Il ne faut pas mettre de guillemets aux crochets de GET.
Donc je pense qu'en faisant :
Ca pourrait marcher.
Mais si tu as des variables get sur chaque page (qui correspondent a la rubrique), il suffit d'écrire <a href="&design=flash">Design flash</a>
Mais surtout le problème c'est que la dernière condition
else {
$_session['design']=defaut;
}
efface systématiquement la valeur de "design" quand on circule dans les pages et qu'il n'y a plus rien à récupérer en GET. Il faudrait en faire une condition du type
elseif ($_GET['design']=='rien du tout')
{
$_SESSION['design']='design1';
}
la fonction isset vérifie si une variable existe.
Donc en faisant :
elseif (!isset($_GEt['desgin']))
{
$_SESSION['design'] = 'defaut';
}
Ca devrait marcher.
Si tu veux vérifier qu'il n'y a ni variable de session 'design', ni de variable get du même nom, tu peux faire :
if ((!isset($_GET['design']) and (!isset($_SESSION['design']))
a plus
oui.
Si tu veux plusieurs variables get, il faut mettre une esperluette &
<a href="?design=flash&rubrique=4">cliquez ici</a>
Mais le problème, c'est que tu ne sais pas si l'url contient déja une variable get ou pas.
donc je ne sais pas si ca marche si une adresse est du genre :
index.php&design=15
Je vais essayer.
Sinon, tu peux essayer en regardant si il y a déja une variable get.
Si on écrit :
$les_variables_get=$_GET[];
la variable $les_variables_get devient égale au contenu de toutes les variables get.
Il ne faut pas mettre de guillemets aux crochets de GET.
Donc je pense qu'en faisant :
if isset($_GET[]) { echo '<a href="&rubrique=1">Rubique 1</a>'; } else { echo '<a href="?rubrique=1">Rubique 1</a>'; }
Ca pourrait marcher.
Mais si tu as des variables get sur chaque page (qui correspondent a la rubrique), il suffit d'écrire <a href="&design=flash">Design flash</a>
Mais surtout le problème c'est que la dernière condition
else {
$_session['design']=defaut;
}
efface systématiquement la valeur de "design" quand on circule dans les pages et qu'il n'y a plus rien à récupérer en GET. Il faudrait en faire une condition du type
elseif ($_GET['design']=='rien du tout')
{
$_SESSION['design']='design1';
}
la fonction isset vérifie si une variable existe.
Donc en faisant :
elseif (!isset($_GEt['desgin']))
{
$_SESSION['design'] = 'defaut';
}
Ca devrait marcher.
Si tu veux vérifier qu'il n'y a ni variable de session 'design', ni de variable get du même nom, tu peux faire :
if ((!isset($_GET['design']) and (!isset($_SESSION['design']))
a plus
xbb
Messages postés
49
Date d'inscription
dimanche 24 septembre 2006
Statut
Membre
Dernière intervention
10 mai 2007
1
24 oct. 2006 à 12:55
24 oct. 2006 à 12:55
Je pense qu"il vaut mieux faire le test de présence de la variable dès le début :
Comme ca on teste si le user a cliqué sur un changement de style en premier.
Si ca n'est pas le cas, on vérifie que $_SESSION['design'] n'existe pas avant de lui donner le style par défaut (car sinon le style en cours est irrémédiablement remplacé par défaut)
<?php // Démarrage de la session session_start(); // Si le user a demandé un changement de style : if ( isset ( $_GET['design'] )){ if ($_GET['design']=='design1') { $_SESSION['design']='design1'; } elseif ($_GET['design']=='design2') { $_SESSION['design']='design2'; } } // Si le user n'a pas dmeandé de changement de style : else { // On place le style par défaut si aucun autre style n'avait été défini avant if (!isset ( $_SESSION['design'] ) { $_SESSION['design']='defaut'; } } ?>
Comme ca on teste si le user a cliqué sur un changement de style en premier.
Si ca n'est pas le cas, on vérifie que $_SESSION['design'] n'existe pas avant de lui donner le style par défaut (car sinon le style en cours est irrémédiablement remplacé par défaut)
xbb
Messages postés
49
Date d'inscription
dimanche 24 septembre 2006
Statut
Membre
Dernière intervention
10 mai 2007
1
24 oct. 2006 à 13:10
24 oct. 2006 à 13:10
Et pour ne pas te perdre, je sépare mes posts
Alternative à la série de if suivante :
Tu peux la remplacer par :
N'hésite pas à demander des précisions, et bon courage!!
Alternative à la série de if suivante :
if ( isset ( $_GET['design'] )){ if ($_GET['design']=='design1') { $_SESSION['design']='design1'; } elseif ($_GET['design']=='design2') { $_SESSION['design']='design2'; } }
Tu peux la remplacer par :
if ( isset ( $_GET['design'] )) { switch ($_GET['design']) { case "design1" : $_SESSION['design']='design1'; break; case "design2" : $_SESSION['design']='design2'; break; } }
N'hésite pas à demander des précisions, et bon courage!!
katadrapata
Messages postés
13
Date d'inscription
samedi 21 octobre 2006
Statut
Membre
Dernière intervention
25 octobre 2006
24 oct. 2006 à 13:45
24 oct. 2006 à 13:45
Merci beaucoup pour votre aide !!
Je n'ai aps eu le temps de poster hier soir, après 20 h de codage forcené... mais ça marche très bien ! Je n'ai pas eu besoin de la fonction isset pour l'instant, mais ce sera sans doute plus propre.
Voilà, je démarre en php, il ne me reste plus qu'à acheter des bouquins:)) Le résultat est visible ici http://www.lentrelacs.org (le design n'est pas terrible, mais pour le texte, le changement d'interface est très pratique).
Bravo à la communauté CCM !
EDIT le code final de la fonction est assez barbare...
<?php session_start(); if ($_GET['design']=='1') {$_SESSION['design']='1';}
elseif ($_GET['design']=='2') {$_SESSION['design']='2';}
elseif ($_SESSION['design']=='2') {$_SESSION['design']='2';}
else {$_SESSION['design']='1';} ?>
Je n'ai aps eu le temps de poster hier soir, après 20 h de codage forcené... mais ça marche très bien ! Je n'ai pas eu besoin de la fonction isset pour l'instant, mais ce sera sans doute plus propre.
Voilà, je démarre en php, il ne me reste plus qu'à acheter des bouquins:)) Le résultat est visible ici http://www.lentrelacs.org (le design n'est pas terrible, mais pour le texte, le changement d'interface est très pratique).
Bravo à la communauté CCM !
EDIT le code final de la fonction est assez barbare...
<?php session_start(); if ($_GET['design']=='1') {$_SESSION['design']='1';}
elseif ($_GET['design']=='2') {$_SESSION['design']='2';}
elseif ($_SESSION['design']=='2') {$_SESSION['design']='2';}
else {$_SESSION['design']='1';} ?>
xbb
Messages postés
49
Date d'inscription
dimanche 24 septembre 2006
Statut
Membre
Dernière intervention
10 mai 2007
1
24 oct. 2006 à 13:49
24 oct. 2006 à 13:49
A moi de te poser une question :
Quelle technique utilises-tu pour arrondir les coins dans ton footer?
Quelle technique utilises-tu pour arrondir les coins dans ton footer?
katadrapata
Messages postés
13
Date d'inscription
samedi 21 octobre 2006
Statut
Membre
Dernière intervention
25 octobre 2006
24 oct. 2006 à 13:54
24 oct. 2006 à 13:54
C'est une image rectangulaire dans une cellule de tableau ; les coins sont arrondis sur l'image avec la même couleur que le fond... Pourquoi ?;)
xbb
Messages postés
49
Date d'inscription
dimanche 24 septembre 2006
Statut
Membre
Dernière intervention
10 mai 2007
1
24 oct. 2006 à 14:06
24 oct. 2006 à 14:06
Ok je fais pareil.
Un conseil : pour ne pas t'embêter à changer ces images quand le style change (et donc la couleur de fond), crée des gifs!!! Tu peux rendre des parties des gifs transparentes.
Sinon je sais qu'il existe une technique bien plus nette qui consiste à changer le margin (je ne suis plus vraiment sûr que c'est le margin, c'est peut-être le pading ou autre chose) pixel par pixel, mais je la trouve lourde.
Cependant elle respecte la séparation code html - présentation, et a l'avantage d'être toujours propre, quelque soit le navigateur (avec ta technique, parfois les images sont décalées selon le navigateur et ca fait sale)
Un conseil : pour ne pas t'embêter à changer ces images quand le style change (et donc la couleur de fond), crée des gifs!!! Tu peux rendre des parties des gifs transparentes.
Sinon je sais qu'il existe une technique bien plus nette qui consiste à changer le margin (je ne suis plus vraiment sûr que c'est le margin, c'est peut-être le pading ou autre chose) pixel par pixel, mais je la trouve lourde.
Cependant elle respecte la séparation code html - présentation, et a l'avantage d'être toujours propre, quelque soit le navigateur (avec ta technique, parfois les images sont décalées selon le navigateur et ca fait sale)
katadrapata
Messages postés
13
Date d'inscription
samedi 21 octobre 2006
Statut
Membre
Dernière intervention
25 octobre 2006
24 oct. 2006 à 14:19
24 oct. 2006 à 14:19
Bonne idée pour les gif. Par contre je ne connais pas la technique "margin", et je ne vois pas du tout comment ça peut marcher (margin/padding = retrait ajout de pixels en bordure de cellule, pas dans les coins en arrondi ?)
xbb
Messages postés
49
Date d'inscription
dimanche 24 septembre 2006
Statut
Membre
Dernière intervention
10 mai 2007
1
24 oct. 2006 à 15:15
24 oct. 2006 à 15:15
Un lien en français :
http://www.journaldunet.com/developpeur/tutoriel/css/051206-css-boite-bordure-arrondi.shtml
(code tres basique mais facilement adaptable)
Des sources plus complexes mais apportant des solutions plus sympa :
http://www.cssplay.co.uk/boxes/snazzy.html
http://www.cssplay.co.uk/boxes/snazzy2.html
(afficher le code source des pages pour voir comment c'est fait)
http://www.journaldunet.com/developpeur/tutoriel/css/051206-css-boite-bordure-arrondi.shtml
(code tres basique mais facilement adaptable)
Des sources plus complexes mais apportant des solutions plus sympa :
http://www.cssplay.co.uk/boxes/snazzy.html
http://www.cssplay.co.uk/boxes/snazzy2.html
(afficher le code source des pages pour voir comment c'est fait)
katadrapata
Messages postés
13
Date d'inscription
samedi 21 octobre 2006
Statut
Membre
Dernière intervention
25 octobre 2006
24 oct. 2006 à 16:33
24 oct. 2006 à 16:33
Incroyable... Je ne pensais pas qu'on pouvait aller aussi loin avec les css