[javascript] staat uitklapmenu van pagina's in 1 cookie opsl

Pagina: 1
Acties:
  • 409 views sinds 30-01-2008
  • Reageer

  • Collaborator
  • Registratie: April 2002
  • Laatst online: 30-03 11:49

Collaborator

You! Cake or Death?

Topicstarter
Als navigatie van een websie heb ik een uitklapmenu (code van http://www.dynamicdrive.com/) En dat werkt prima, totdat alle dynamische pagina's (page.php?id=1 of 2 enz.) naar losse html bestanden geschreven werden (pagina1.html pagina 2.html)
Het probleem is dat hij de huidige stand van het menu opslaat in een cookie, maar omdat alle pagina's nu een andere naam hebben maakt hij er andere cookies voor (dus per pagina onthoud hij een eigen stand)

Nu heb ik zitten graven in de code maar kom ik niet heel erg ver zonder javascript ervaring ;(

// edit.

Na wat zoeken ben ik al iets verder, hij gebruikt het pad en de bestandsnaam / waarde ("/pagina.html") voor de cookie van de betreffende pagina.

nu zie ik overal window.location.pathname staan, maar daar moet natuurlijk gewoon ipv. pathname een vaste naam komen.
code:
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
var enablepersist="on" //Enable saving state of content structure using session cookies? (on/off)
var collapseprevious="yes" //Collapse previously open content when opening present? (yes/no)

if (document.getElementById){
document.write('<style type="text/css">')
document.write('.switchcontent{display:none;}')
document.write('</style>')
}

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"
}
// hier moet het probleem ergens liggen
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(){
getElementbyClass("switchcontent")
if (enablepersist=="on" && typeof ccollect!="undefined")
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


Het zou toch niet al te moeilijk moeten zijn om er voor te zorgen dat hij de stand van het menu opslaat in een cookie in plaats van telkens een andere te maken (dat werkt voor geen meter)

[ Voor 18% gewijzigd door Collaborator op 23-01-2006 11:21 ]

This space is occupied


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Zoals het er in regel 77 uitziet sla je de gehele URI op. Als je dat nou probeert te veranderen dat er alleen maar domeinnaam oid in komt te staan ;)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • Collaborator
  • Registratie: April 2002
  • Laatst online: 30-03 11:49

Collaborator

You! Cake or Death?

Topicstarter
document.cookie="cookienaam"+selectedItem

zoeits dan?

This space is occupied


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Probleem is alleen dat je dan ook je uitlees-functie moet aanpassen. Wellicht kan je je verdiepen in hoe je cookies schrijft en leest (is makkelijker dan je denkt) en je functies herschrijven zodat je de benodigde informatie opslaat.

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • Collaborator
  • Registratie: April 2002
  • Laatst online: 30-03 11:49

Collaborator

You! Cake or Death?

Topicstarter
Zou het graag doen, maar daar heb ik geen tijd voor. Ik kreeg dit klusje even toegeschoven en ik heb er al even wat over gelezen en opgezocht maar veel meer tijd kan ik er niet aan besteden.

Dus tja dan hebben ze maar pech anders (8>

[ Voor 12% gewijzigd door Collaborator op 23-01-2006 14:28 ]

This space is occupied