Avatar billede reino Nybegynder
06. september 2005 - 11:32 Der er 13 kommentarer og
1 løsning

Session cookie kan ikke findes

Hejsa

Har fundet følgende kode som genererer en træmenu, jeg har dog det problem at den sætter en cookie på computeren men kan ikke finde den nogen steder på computeren. Problemet er at jeg skal have fundet ud af hvordan man nulstiller cookien. Når man er inde på siden med det script og har klikket på et menupunkt så åbner menuen, såfremt man går tilbage til forsiden (Hvor menuen ikke er på) og så går tilbage til siden med menuen igen er træet stadigvæk foldet ud, jeg skal nulstille den på en eller anden måde, men kan ikke lure hvor man gør dette. Håber der er nogen derkan hjælpe, har store probs med det.

// Node object
function Node(id, pid, name, url, title, target, icon, iconOpen, open) {
    this.id = id;
    this.pid = pid;
    this.name = name;
    this.url = url;
    this.title = title;
    this.target = target;
    this.icon = icon;
    this.iconOpen = iconOpen;
    this._io = open || false;
    this._is = false;
    this._ls = false;
    this._hc = false;
    this._ai = 0;
    this._p;
};

// Menu object settings
var menuObjVar1 = "";
var menuObjVar2 = 0;
function menuObjSettings(MenuObjSeperatorType,imgPath,menuMargin) {
    if (MenuObjSeperatorType != "" && MenuObjSeperatorType != "0") {
        if (MenuObjSeperatorType == "1") {
            menuObjVar1 = "<hr width='100%' color='#ffffff' size='1' noshade>"
        } else {   
            if (imgPath != "http://" && imgPath != "") {
                menuObjVar1 = "<img src='"+ imgPath +"' border=0>";
            } else {
                menuObjVar1 = "";
            }   
        }   
    }   
    menuObjVar2 = parseInt(menuMargin);
}

// Tree object
function dTree(objName) {
    this.config = {
        target                : null,
        folderLinks            : true,
        useSelection        : true,
        useCookies            : true,
        useLines            : true,
        useIcons            : true,
        useStatusText        : false,
        closeSameLevel        : true,
        inOrder                : false
    }
    this.icon = {
        root                : './templates/menub.gif',
        folder                : './templates/menub.gif',
        folderOpen            : './templates/menub.gif',
        node                : './templates/menub.gif',
        empty                : './templates/menub.gif',
        line                : './templates/menub.gif',
        join                : './templates/menub.gif',
        joinBottom            : './templates/menub.gif',
        plus                : './templates/menub.gif',
        plusBottom            : './templates/menub.gif',
        minus                : './templates/menub.gif',
        minusBottom            : './templates/menub.gif',
        nlPlus                : './templates/menub.gif',
        nlMinus                : './templates/menub.gif'
    };
    this.obj = objName;
    this.aNodes = [];
    this.aIndent = [];
    this.root = new Node(-1);
    this.selectedNode = null;
    this.selectedFound = false;
    this.completed = false;
};

// Adds a new node to the node array
dTree.prototype.add = function(id, pid, name, url, title, target, icon, iconOpen, open) {
    this.aNodes[this.aNodes.length] = new Node(id, pid, name, url, title, target, icon, iconOpen, open);
};

// Open/close all nodes
dTree.prototype.openAll = function() {
    this.oAll(true);
};
dTree.prototype.closeAll = function() {
    this.oAll(false);
};

// Outputs the tree to the page
dTree.prototype.toString = function() {
    var str = '<div class="dtree">\n';
    if (document.getElementById) {
        if (this.config.useCookies) this.selectedNode = this.getSelected();
        str += this.addNode(this.root);
    } else str += 'Browser not supported.';
    str += '</div>';
    if (!this.selectedFound) this.selectedNode = null;
    this.completed = true;
   
    str += menuObjVar1;
    if (menuObjVar2 > 0) {
        str += '<img width="100%" height="'+menuObjVar2+'" src="./templates/1x1.gif" border=0 />';
    }   
   
    return str;
};

// Creates the tree structure
dTree.prototype.addNode = function(pNode) {
    var str = '';
    var n=0;
    if (this.config.inOrder) n = pNode._ai;
    for (n; n<this.aNodes.length; n++) {
        if (this.aNodes[n].pid == pNode.id) {
            var cn = this.aNodes[n];
            cn._p = pNode;
            cn._ai = n;
            this.setCS(cn);
            if (!cn.target && this.config.target) cn.target = this.config.target;
            if (cn._hc && !cn._io && this.config.useCookies) cn._io = this.isOpen(cn.id);
            if (!this.config.folderLinks && cn._hc) cn.url = null;
            if (this.config.useSelection && cn.id == this.selectedNode && !this.selectedFound) {
                    cn._is = true;
                    this.selectedNode = n;
                    this.selectedFound = true;
            }
            str += this.node(cn, n);
            if (cn._ls) break;
        }
    }
    return str;
};

// Creates the node icon, url and text
dTree.prototype.node = function(node, nodeId) {
    var str = '<div class="dTreeNode">' + this.indent(node, nodeId);
    if (this.config.useIcons) {
        if (!node.icon) node.icon = (this.root.id == node.pid) ? this.icon.root : ((node._hc) ? this.icon.folder : this.icon.node);
        if (!node.iconOpen) node.iconOpen = (node._hc) ? this.icon.folderOpen : this.icon.node;
        if (this.root.id == node.pid) {
            node.icon = this.icon.root;
            node.iconOpen = this.icon.root;
        }
        if (node.icon == "./templates/1x1.gif") {
            str += '<img width=0 height=0 id="i' + this.obj + nodeId + '" src="' + ((node._io) ? node.iconOpen : node.icon) + '" border=0 alt="" />';
        } else {
            str += '<img id="i' + this.obj + nodeId + '" src="' + ((node._io) ? node.iconOpen : node.icon) + '" border=0 align=center alt="" />';
        }   
    }
    if (node.url) {
        if (node.pid != 0) {
            str += '<a id="s' + this.obj + nodeId + '" class="' + ((this.config.useSelection) ? ((node._is ? 'submenu' : 'submenu')) : 'submenu') + '" href="' + node.url + '"';
        } else {   
            str += '<a id="s' + this.obj + nodeId + '" class="' + ((this.config.useSelection) ? ((node._is ? 'nodeSel' : 'node')) : 'node') + '" href="' + node.url + '"';
        }   
        if (node.title) str += ' title="' + node.title + '"';
        if (node.target) str += ' target="' + node.target + '"';
        if (this.config.useStatusText) str += ' onmouseover="window.status=\'' + node.name + '\';return true;" onmouseout="window.status=\'\';return true;" ';
        if (this.config.useSelection && ((node._hc && this.config.folderLinks) || !node._hc))
            str += ' onclick="java script: ' + this.obj + '.s(' + nodeId + ');"';
            if (node._hc) {
                str += ' onMouseUp="java script: ' + this.obj + '.o(' + nodeId + ');"';
            }   
        str += '>';
    }
    else if ((!this.config.folderLinks || !node.url) && node._hc && node.pid != this.root.id) {
        if (node.pid != 0) {
            str += '<a href="java script: ' + this.obj + '.o(' + nodeId + ');" class="submenu">';
        } else {   
            str += '<a href="java script: ' + this.obj + '.o(' + nodeId + ');" class="node">';
        }   
    }   
    str += node.name;
    if (node.url || ((!this.config.folderLinks || !node.url) && node._hc)) str += '</a>';
    str += '</div>';

    if (node._hc) {
        str += '<div id="d' + this.obj + nodeId + '" class="clip" style="display:' + ((this.root.id == node.pid || node._io) ? 'block' : 'none') + ';">';
        str += this.addNode(node);
        str += '</div>';
    }   
    this.aIndent.pop();
    return str;
};

// Adds the empty and line icons
dTree.prototype.indent = function(node, nodeId) {
    var str = '';
    if (this.root.id != node.pid) {
        for (var n=0; n<this.aIndent.length; n++) {
            str += '<img src="' + ( (this.aIndent[n] == 1 && this.config.useLines) ? this.icon.line : this.icon.empty ) + '" border=0 alt="" />';
        }
        (node._ls) ? this.aIndent.push(0) : this.aIndent.push(1);
       
        if (node._hc) {
            str += '<a href="java script: ' + this.obj + '.o(' + nodeId + ');">'

            str += '<img id="j' + this.obj + nodeId + '" border=0 width=0 height=0 src="';
            if (!this.config.useLines) str += (node._io) ? this.icon.nlMinus : this.icon.nlPlus;
            else str += ( (node._io) ? ((node._ls && this.config.useLines) ? this.icon.minusBottom : this.icon.minus) : ((node._ls && this.config.useLines) ? this.icon.plusBottom : this.icon.plus ) );
            str += '" alt="" />'
            str += '</a>';
        } else {

            str += '<img width=0 height=0 src="' + ( (this.config.useLines) ? ((node._ls) ? this.icon.joinBottom : this.icon.join ) : this.icon.empty) + '" border=0 alt="" />';
        }   


        if (nodeId != 1) {
            str += menuObjVar1;
            if (menuObjVar2 > 0) {
                str += '<img width="100%" height="'+menuObjVar2+'" src="./templates/1x1.gif" border=0 />';
            }   
        }   
    }
    return str;
};

// Checks if a node has any children and if it is the last sibling
dTree.prototype.setCS = function(node) {
    var lastId;
    for (var n=0; n<this.aNodes.length; n++) {
        if (this.aNodes[n].pid == node.id) node._hc = true;
        if (this.aNodes[n].pid == node.pid) lastId = this.aNodes[n].id;
    }
    if (lastId==node.id) node._ls = true;
};

// Returns the selected node
dTree.prototype.getSelected = function() {
    var sn = this.getCookie('cs' + this.obj);
    return (sn) ? sn : null;
};

// Highlights the selected node
dTree.prototype.s = function(id) {
    if (!this.config.useSelection) return;
    var cn = this.aNodes[id];
    if (cn._hc && !this.config.folderLinks) return;
    if (this.selectedNode != id) {
        if (this.selectedNode || this.selectedNode==0) {
            eOld = document.getElementById("s" + this.obj + this.selectedNode);

        }
        eNew = document.getElementById("s" + this.obj + id);

        this.selectedNode = id;
        if (this.config.useCookies) this.setCookie('cs' + this.obj, cn.id);
    }
};

// Toggle Open or close
dTree.prototype.o = function(id) {
    var cn = this.aNodes[id];
    this.nodeStatus(!cn._io, id, cn._ls);
    cn._io = !cn._io;
    if (this.config.closeSameLevel) this.closeLevel(cn);
    if (this.config.useCookies) this.updateCookie();
};

// Open or close all nodes
dTree.prototype.oAll = function(status) {
    for (var n=0; n<this.aNodes.length; n++) {
        if (this.aNodes[n]._hc && this.aNodes[n].pid != this.root.id) {
            this.nodeStatus(status, n, this.aNodes[n]._ls)
            this.aNodes[n]._io = status;
        }
    }
    if (this.config.useCookies) this.updateCookie();
};

// Opens the tree to a specific node
dTree.prototype.openTo = function(nId, bSelect, bFirst) {
    if (!bFirst) {
        for (var n=0; n<this.aNodes.length; n++) {
            if (this.aNodes[n].id == nId) {
                nId=n;
                break;
            }
        }
    }
    var cn=this.aNodes[nId];
    if (cn.pid==this.root.id || !cn._p) return;
    cn._io = true;
    cn._is = bSelect;
    if (this.completed && cn._hc) this.nodeStatus(true, cn._ai, cn._ls);
    if (this.completed && bSelect) this.s(cn._ai);
    else if (bSelect) this._sn=cn._ai;
    this.openTo(cn._p._ai, false, true);
};

// Closes all nodes on the same level as certain node
dTree.prototype.closeLevel = function(node) {
    for (var n=0; n<this.aNodes.length; n++) {
        if (this.aNodes[n].pid == node.pid && this.aNodes[n].id != node.id && this.aNodes[n]._hc) {
            this.nodeStatus(false, n, this.aNodes[n]._ls);
            this.aNodes[n]._io = false;
            this.closeAllChildren(this.aNodes[n]);
        }
    }
}

// Closes all children of a node
dTree.prototype.closeAllChildren = function(node) {
    for (var n=0; n<this.aNodes.length; n++) {
        if (this.aNodes[n].pid == node.id && this.aNodes[n]._hc) {
            if (this.aNodes[n]._io) this.nodeStatus(false, n, this.aNodes[n]._ls);
            this.aNodes[n]._io = false;
            this.closeAllChildren(this.aNodes[n]);       
        }
    }
}

// Change the status of a node(open or closed)
dTree.prototype.nodeStatus = function(status, id, bottom) {
    eDiv    = document.getElementById('d' + this.obj + id);
    eJoin    = document.getElementById('j' + this.obj + id);
    if (this.config.useIcons) {
        eIcon    = document.getElementById('i' + this.obj + id);
        eIcon.src = (status) ? this.aNodes[id].iconOpen : this.aNodes[id].icon;
    }
    eJoin.src = (this.config.useLines)?
    ((status)?((bottom)?this.icon.minusBottom:this.icon.minus):((bottom)?this.icon.plusBottom:this.icon.plus)):
    ((status)?this.icon.nlMinus:this.icon.nlPlus);
    eDiv.style.display = (status) ? 'block': 'none';
};


// [Cookie] Clears a cookie
dTree.prototype.clearCookie = function() {
    var now = new Date();
    var yesterday = new Date(now.getTime() - 1000 * 60 * 60 * 24);
    this.setCookie('co'+this.obj, 'cookieValue', yesterday);
    this.setCookie('cs'+this.obj, 'cookieValue', yesterday);
};

// [Cookie] Sets value in a cookie
dTree.prototype.setCookie = function(cookieName, cookieValue, expires, path, domain, secure) {
    document.cookie =
        escape(cookieName) + '=' + escape(cookieValue)
        + (expires ? '; expires=' + expires.toGMTString() : '')
        + (path ? '; path=' + path : '')
        + (domain ? '; domain=' + domain : '')
        + (secure ? '; secure' : '');
};

// [Cookie] Gets a value from a cookie
dTree.prototype.getCookie = function(cookieName) {
    var cookieValue = '';
    var posName = document.cookie.indexOf(escape(cookieName) + '=');
    if (posName != -1) {
        var posValue = posName + (escape(cookieName) + '=').length;
        var endPos = document.cookie.indexOf(';', posValue);
        if (endPos != -1) cookieValue = unescape(document.cookie.substring(posValue, endPos));
        else cookieValue = unescape(document.cookie.substring(posValue));
    }
    return (cookieValue);
};

// [Cookie] Returns ids of open nodes as a string
dTree.prototype.updateCookie = function() {
    var str = '';
    for (var n=0; n<this.aNodes.length; n++) {
        if (this.aNodes[n]._io && this.aNodes[n].pid != this.root.id) {
            if (str) str += '.';
            str += this.aNodes[n].id;
        }
    }
    this.setCookie('co' + this.obj, str);
};

// [Cookie] Checks if a node id is in a cookie
dTree.prototype.isOpen = function(id) {
    var aOpen = this.getCookie('co' + this.obj).split('.');
    for (var n=0; n<aOpen.length; n++)
        if (aOpen[n] == id) return true;
    return false;
};

// If Push and pop is not implemented by the browser
if (!Array.prototype.push) {
    Array.prototype.push = function array_push() {
        for(var i=0;i<arguments.length;i++)
            this[this.length]=arguments[i];
        return this.length;
    }
};
if (!Array.prototype.pop) {
    Array.prototype.pop = function array_pop() {
        lastElement = this[this.length-1];
        this.length = Math.max(this.length-1,0);
        return lastElement;
    }
};
Avatar billede olebole Juniormester
06. september 2005 - 11:57 #1
<ole>

Session-variabler har du kun adgang til på serveren ... ellers var der ingen mening med at bruge en session  :)

/mvh
</bole>
Avatar billede olebole Juniormester
06. september 2005 - 12:03 #2
- ahaaa ... du mener bare en alm. cookie  ;o)

Det er der en indbygget funktion til. Prøv:
  myTree.clearCookie();

- hvis din instans af træet hedder 'myTree'
Avatar billede olebole Juniormester
06. september 2005 - 12:03 #3
- rettelse: "Det er der en indbygget metode til"  :)
Avatar billede reino Nybegynder
06. september 2005 - 12:08 #4
hejsa, tak for svar, ikke en ørn til javascript, men jeg går ud fra at myTree.clearCookie(); skal sættes på den side som ikke genererer træet ?. I så fald, hvad skal jeg præcist skriver så ?, tusinde tak
Avatar billede olebole Juniormester
06. september 2005 - 13:56 #5
Hvad hedder din træ-instans?
Avatar billede reino Nybegynder
06. september 2005 - 15:33 #6
den hedder blot dTree
Avatar billede olebole Juniormester
06. september 2005 - 17:25 #7
Det kan jeg meget dårligt forestille mig  :)
Avatar billede reino Nybegynder
06. september 2005 - 17:59 #8
Hejsa

Oki :), sådan kalder jeg javascriptet fra siden hvis det er det du mener :)

<div class="dtree">
<script type="text/javascript">
<!--
menuObjSettings('144','','6');
l = new dTree('l');
l.add(0,-1,'');

l.add(26,0,'Nyheder','default.asp?mainmenu=1','Nyheder','_self','','');

etc etc
       
document.write(l);
//-->
</script>
Avatar billede olebole Juniormester
06. september 2005 - 18:46 #9
Så hedder instansen 'l'. Altså må det hedde:
  l.clearCookie()
Avatar billede reino Nybegynder
06. september 2005 - 19:00 #10
hejsa, igen, ikke så skarp på det java, hvor skal jeg indsætte denne funktion, i javascriptet. Har prøvet at indsætte dette på forsiden, hvor menuen ikke er:

<div class="dtree">
<script type="text/javascript">
<!--
menuObjSettings('144','','6');
l = new dTree('l');
l.clearCookie();
document.write(l);
//-->
</script>

Men menuen er stadigvæk foldet ud når man går ind på en af undersiderne med menutræet
Avatar billede olebole Juniormester
06. september 2005 - 19:16 #11
Det er ikke til at gætte sig til. Prøv med et link til siden
Avatar billede reino Nybegynder
06. september 2005 - 19:25 #12
heps, linket er: http://1.reinholdt.cc/default.htm

default.htm er forsiden, når man klikker på henholsvist det ene eller andet link ryger man så ind til asp siden som genererer menuen, såfremt man klikker på logo oppe i højre hjørne ryger man ud på forsiden igen. Det jeg har prøvet er at få menuens cookies til at slette, men uden held :)
Avatar billede olebole Juniormester
07. september 2005 - 10:04 #13
Jeg fatter nada af, hvad der sker i denne tråd
Avatar billede reino Nybegynder
27. februar 2006 - 21:04 #14
hey igen, tusinde tak for hjælpen, men ikke relevant mere, rydder op for god ordens skyld
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester