IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Un CSS Switching fonctionnel sur toutes les pages de mon site


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2009
    Messages : 18
    Points : 15
    Points
    15
    Par défaut Un CSS Switching fonctionnel sur toutes les pages de mon site
    Bonjour tout le monde,

    Je travail actuellement sur un projet spécifique ou je proposerai à l'Internaute de modifier l'aspect de la page (couleur des liens, du header) à l'aide d'un ou de plusieurs boutons, pour réaliser cela j'ai fouillé dans mes anciens cours de JS ou j'ai retrouvé un "CSS Switching".

    Le résultat n'est pas totalement satisfaisant, en effet, lorsque je clique sur un bouton pour changer les couleurs du site, les modifications ne prennent effets que sur une page... et non pas sur toutes les pages du site.

    Voici mon code JS:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    function changeStyleSheet(title) {
       var links = document.getElementsByTagName("link");
    	for(var i = 0; i < links.length; i++) {
    		if(links[i].getAttribute("title")) links[i].disabled = true;
    		if(links[i].getAttribute("title") == title) {
    			links[i].disabled = false;
    			var expires = new Date();
    			expires.setTime(expires.getTime() + (30*24*60*60*1000));
    			document.cookie = "stylesheet="+title+";expires="+expires.toGMTString()+";path=/";
    		}
    	}
    }
     
    function getStylesheetFromCookie() {
    	var cookie = document.cookie.split(";");
    	for(var i = 0; i < cookie.length; i++) {
    		var values = cookie[i].split("=");
    		if (values[0] == "stylesheet") changeStyleSheet(values[1]);
    	}
    }
    Voici mon code XHTML

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <div style="text-align: center; border: 1px solid #333333; background-color: #f2f2f2">
    <p>Couleurs proposées</p>
    <img style="cursor: pointer;" alt="violet" src="/common/img/monsite/violet.jpg" onclick="changeStyleSheet('violet')" />
    <img style="cursor: pointer;" alt="vert" src="/common/img/monsite/vert.jpg" onclick="changeStyleSheet('vert')" />	
    </div>
    Je vous remercie pour votre aide.

    Amicalement,

    Adel

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 220
    Points : 167
    Points
    167
    Par défaut
    Il faut un script serveur qui enregistre le changement de css

  3. #3
    Membre averti Avatar de Nicopilami
    Profil pro
    Ingénieur sécurité
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur sécurité

    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Points : 339
    Points
    339
    Par défaut
    Citation Envoyé par gael Voir le message
    Il faut un script serveur qui enregistre le changement de css
    non, pourquoi passer par le serveur ???
    il faut surtout aller lire le cookie au démarrage de la page (window.onload)

    essaie d'ajouter ça à ton code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    window.onload=getStylesheetFromCookie
    bye
    Nicolas

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    cookie, passage de paramètre en get ou variable de session coté serveur, il faut de toute façon passer les paramètres à la page suivante .
    ce serait tout de même plus rapide avec une variable de session

  5. #5
    Membre averti Avatar de Nicopilami
    Profil pro
    Ingénieur sécurité
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur sécurité

    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Points : 339
    Points
    339
    Par défaut
    Hello

    Citation Envoyé par SpaceFrog Voir le message
    ce serait tout de même plus rapide avec une variable de session
    oui, mais je disais ca car la fonction de récupération du cookie existe déjà ...

    function getStylesheetFromCookie() {
    var cookie = document.cookie.split(";");
    bye
    Nico

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2009
    Messages : 18
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par Nicopilami Voir le message

    essaie d'ajouter ça à ton code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    window.onload=getStylesheetFromCookie
    bye
    Nicolas
    Merci pour vos réponses.
    Je suis un néophyte dans ce domaine là, peux-tu me dire où placer exactement le code stp ?

    Cordialement,

    Adel

  7. #7
    Membre averti Avatar de Nicopilami
    Profil pro
    Ingénieur sécurité
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur sécurité

    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Points : 339
    Points
    339
    Par défaut
    place cette ligne juste en dessous de la fin de ta fonction getStylesheetFromCookie
    attention par contre, il faut que tu redéfinisse cette fonction dans toutes tes pages ou que tu fasses un fichier js externe que tu inclue dans toutes tes pages.

    bnye
    Nico

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2009
    Messages : 18
    Points : 15
    Points
    15
    Par défaut
    Voila ce que j'ai écris

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    function changeStyleSheet(title) {
       var links = document.getElementsByTagName("link");
    	for(var i = 0; i < links.length; i++) {
    		if(links[i].getAttribute("title")) links[i].disabled = true;
    		if(links[i].getAttribute("title") == title) {
    			links[i].disabled = false;
    			var expires = new Date();
    			expires.setTime(expires.getTime() + (30*24*60*60*1000));
    			document.cookie = "stylesheet="+title+";expires="+expires.toGMTString()+";path=/";
    		}
    	}
    }
     
    function getStylesheetFromCookie() {
    	var cookie = document.cookie.split(";");
    	for(var i = 0; i < cookie.length; i++) {
    		var values = cookie[i].split("=");
    		if (values[0] == "stylesheet") changeStyleSheet(values[1]);
    	}
    }
     
    window.onload=getStylesheetFromCookie
    Je ne pense pas que cela soit bon car ça ne fonctionne pas. J'ai créé un document externe.

  9. #9
    Membre averti Avatar de Nicopilami
    Profil pro
    Ingénieur sécurité
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur sécurité

    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Points : 339
    Points
    339
    Par défaut
    Citation Envoyé par Adel1982 Voir le message
    Je ne pense pas que cela soit bon car ça ne fonctionne pas. J'ai créé un document externe.
    tu as un message d'erreur ?

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2009
    Messages : 18
    Points : 15
    Points
    15
    Par défaut
    Pas de message d'erreur mais le changement de feuille CSS ne s'opère pas sur toute les pages.

  11. #11
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    Salut,

    La fonction onload est peut-être écrasée. Au cas où, ajoute la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function addLoadListener(func){
    	if(window.addEventListener)
    		window.addEventListener('load',func,false);
    	else if(document.addEventListener)
    		document.addEventListener('load',func,false);
    	else if(window.attachEvent)
    		window.attachEvent('onload',func);
    	else if(typeof window.onload!='function')
    		window.onload=func;
    	else{
    		var oldonload=window.onload;
    		window.onload=function(){oldonload();func();};
    	}
    }
    et remplace la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    window.onload=getStylesheetFromCookie
    par celle-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    addLoadListener(getStylesheetFromCookie);
    pour voir...

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2009
    Messages : 18
    Points : 15
    Points
    15
    Par défaut
    Aucun changement

  13. #13
    Membre averti Avatar de Nicopilami
    Profil pro
    Ingénieur sécurité
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur sécurité

    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Points : 339
    Points
    339
    Par défaut
    Citation Envoyé par Adel1982 Voir le message
    Aucun changement


    argh, je pense que c'est dû à
    document.cookie
    car cette variable est définie au début de la fonction que tu n'appelle pas au chargement de la page;

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2009
    Messages : 18
    Points : 15
    Points
    15
    Par défaut
    euh... c'est à dire ?

  15. #15
    Membre averti Avatar de Nicopilami
    Profil pro
    Ingénieur sécurité
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur sécurité

    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Points : 339
    Points
    339
    Par défaut
    En fait, pour pouvoir retrouver ton cookie de page en page, il faut que tu donnes un nom définitif à ton cookie en créant une variable CookieID (par exemple) au chargement de ta page, pas un nom qui va changer tout le temps; je n'ai pas le temps d'expliquer cela maintenant, je me reconnecte ce soir, si d'autres n'ont pas déjà répondu...


    bye
    Nico

  16. #16
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    En ajoutant le mot-clé break pour quitter la boucle for ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function getStylesheetFromCookie() {
    	var cookie = document.cookie.split(";");
    	for(var i = 0; i < cookie.length; i++) {
    		var values = cookie[i].split("=");
    		if (values[0] == "stylesheet") {
    			changeStyleSheet(values[1]);
    			break;
    		}
    	}
    }

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2009
    Messages : 18
    Points : 15
    Points
    15
    Par défaut
    Rien ne change

  18. #18
    Membre averti Avatar de blade159
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2004
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 226
    Points : 332
    Points
    332

Discussions similaires

  1. [Débutant] appeler onInit() dans toutes les pages de mon site
    Par amAtunisian dans le forum ASP.NET
    Réponses: 0
    Dernier message: 19/03/2013, 12h20
  2. Reporter un menu déroulant dans toutes les pages de mon site
    Par nicofago dans le forum Dreamweaver
    Réponses: 21
    Dernier message: 22/11/2008, 00h49
  3. Ajout d'un lien sur toutes les pages d'un site
    Par dcarroz dans le forum SharePoint
    Réponses: 5
    Dernier message: 30/10/2008, 17h27
  4. CSS texte qui se répète sur toutes les pages
    Par drogba-11 dans le forum Mise en page CSS
    Réponses: 24
    Dernier message: 13/05/2007, 21h49
  5. [css]ecrire sur toutes les pages
    Par despe59 dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 28/06/2006, 14h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo