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 :

Menu expansif avec cookies : problèmes


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 24
    Points : 15
    Points
    15
    Par défaut Menu expansif avec cookies : problèmes
    Bonjour, et merci par avance pour votre aide.
    Je dévellope un site qui utilise un menu expansif en javascript.
    Le script est dans un fichier Menu.js (ci-après).
    J'appelle ce script dans la page de mon menu : Menu.php
    Enfin, j'inclue ce menu à ma guise dans mes pages à l'aide de la fonction
    <?php
    include 'Menu.php'
    ?>
    Le script javascript permet de développer ou de réduire un menu à l'aide de la balise display.
    Ce script génère un cookie qui permet de se souvenir de l'état du menu, à savoir, développer ou réduit.
    Le problème avec ma méthode est que chaque page qui appelle le menu avec la fonction include génère un cookie.
    Si bien qu'en naviguant sur les différentes pages, les états du menu sont bien réstitués, mais il y a autant de réstitution qu'il y a de page qui appellent le menu.
    Par exemple, si Page1.php appelle le menu cela génère un cookie de l'état du menu pour Page1.php.
    Ensuite Page2.php appelle le même menu, cela génère alors un autre cookie de l'état du menu pour Page2.php
    Je voudrais que l'état du menu soit le même pour toutes les pages qui l'appellent.
    Il faudrait alors ne génerer qu'un seul cookie qui sauvegarde l'état du menu, pour toutes les pages qui appellent le menu.
    Je ne fais que personnaliser des scripts récupérés ci ou là, et je ne sais pas quoi modifier pour arriver à régler ce problème, si quelqu'un peut m'aider...

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    var enablepersist="on" //Enable saving state of content structure using session cookies? (on/off)
    var collapseprevious="no" //Collapse previously open content when opening present? (yes/no)
     
    function ClickOnItem(indexItem) 
    { 
    window.location.href=indexItem;  
    }
     
    function getElementbyClass(classname){
    ccollect=new Array()
    var inc=0
    var alltags=document.all? document.all : document.getElementsByTagName("*")
    for (i=0; i<alltags.length; i++){
    if (alltags[i].className==classname)
    ccollect[inc++]=alltags[i]
    }
    }
     
    function contractcontent(omit){
    var inc=0
    while (ccollect[inc]){
    if (ccollect[inc].id!=omit)
    ccollect[inc].style.display="none"
    inc++
    }
    }
     
    function expandcontent(cid){
    if (typeof ccollect!="undefined"){
    if (collapseprevious=="yes")
    contractcontent(cid)
    document.getElementById(cid).style.display=(document.getElementById(cid).style.display!="block")? "block" : "none"
    }
    }
     
    function revivecontent(){
    contractcontent("omitnothing")
    selectedItem=getselectedItem()
    selectedComponents=selectedItem.split("|")
    for (i=0; i<selectedComponents.length-1; i++)
    document.getElementById(selectedComponents[i]).style.display="block"
    }
     
    function get_cookie(Name) { 
    var search = Name + "="
    var returnvalue = "";
    if (document.cookie.length > 0) {
    offset = document.cookie.indexOf(search)
    if (offset != -1) { 
    offset += search.length
    end = document.cookie.indexOf(";", offset);
    if (end == -1) end = document.cookie.length;
    returnvalue=unescape(document.cookie.substring(offset, end))
    }
    }
    return returnvalue;
    }
     
    function getselectedItem(){
    if (get_cookie(window.location.pathname) != ""){
    selectedItem=get_cookie(window.location.pathname)
    return selectedItem
    }
    else
    return ""
    }
     
    function saveswitchstate(){
    var inc=0, selectedItem=""
    while (ccollect[inc]){
    if (ccollect[inc].style.display=="block")
    selectedItem+=ccollect[inc].id+"|"
    inc++
    }
     
    document.cookie=window.location.pathname+"="+selectedItem
    }
     
    function do_onload(){
    uniqueidn=window.location.pathname+"firsttimeload"
    getElementbyClass("switchcontent")
    if (enablepersist=="on" && typeof ccollect!="undefined"){
    document.cookie=(get_cookie(uniqueidn)=="")? uniqueidn+"=1" : uniqueidn+"=0" 
    firsttimeload=(get_cookie(uniqueidn)==1)? 1 : 0 //check if this is 1st page load
    if (!firsttimeload)
    revivecontent()
    }
    }
     
     
    if (window.addEventListener)
    window.addEventListener("load", do_onload, false)
    else if (window.attachEvent)
    window.attachEvent("onload", do_onload)
    else if (document.getElementById)
    window.onload=do_onload
     
    if (enablepersist=="on" && document.getElementById)
    window.onunload=saveswitchstate
    Fichiers attachés Fichiers attachés

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 24
    Points : 15
    Points
    15
    Par défaut
    J'ai résolu mon problème !
    En fait, le cookie généré par le menu portait le nom du dossier de la page à cause de la fonction : window.location.pathname
    J'ai donc remplacé cette fonction par : window.location.host pour avoir comme nom de cookie, le nom de domaine qui lui est commun à toutes les pages. Et de cette manière, tout marche nickel !
    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Cookies] Problème avec cookie
    Par chienlou dans le forum Langage
    Réponses: 4
    Dernier message: 16/05/2006, 15h55
  2. [Cookies] Problème avec GET
    Par philippef dans le forum Langage
    Réponses: 6
    Dernier message: 08/03/2006, 15h56
  3. [Cookies] problème avec if
    Par PAYASS59 dans le forum Langage
    Réponses: 11
    Dernier message: 20/02/2006, 12h07
  4. [Cookies] Problème avec les sessions PHP !!!
    Par boukay dans le forum Langage
    Réponses: 4
    Dernier message: 14/02/2006, 17h32
  5. [Cookies] problème avec site multilingue
    Par lacfab dans le forum Langage
    Réponses: 13
    Dernier message: 30/12/2005, 23h10

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