Ik ben bezig met een navigatiedingetje door een soort boomstructuur (allemaal in html output, geen js). Om te weten wat ik met m'n plek (pad) in de boom moet doen, moet ik weten wat de relatie is tussen de huidige positie in de boom en de volgende positie. Daarom wordt deze 'context' bij elke frame refresh (dus bij een navigatiesprong) doorgegeven als variable. in de volgende snippet staat hoe die 'context' steeds iets anders doet met het pad in de boom:
Nah dat werkt allemaal prima, behalve wanneer de argeloze gebruiker op z'n browser-'back'-knop gaat lopen drukken. Want als je bij voorbeeld zo'n 'boomstructuur' hebt:
En je navigeert van A naar B naar C, dan zijn de variabelen opeenvolgend:
van A naar B: $id=2; $context=children; $aPath: [1] -> [1,2]
van B naar C: $id=3; $context=children; $aPath: [1,2] -> [1,2,3]
maar als dan ineens iemand op de back knop drukt, dan blijven $id en $context bestaan. Het volgende gebeurt dus, $id en $context zijn dan weer resp. 2 en 'children', terwijl je eigenlijk $id=2 en $context='parent' wilt zien. Dus gaat alles mis want dan wordt het pad als volgt [1,2,3,2] en dan kan dus helemaal niet, met alle nare gevolgen van dien. Hoe vang ik dit nou af?
PHP:
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
| <? // adjust path, depending on $sContext switch($sContext) { case "children": { // append id to path: array_push($aPath, $id); break; } case "parent": { // pop the last id from the path: array_pop($aPath); break; } case "related": { // we need a completely new path: $aPath = KN_Probe_PathToRoot($id); break; } case "siblings": { // replace the last item of current path with id: array_pop($aPath); array_push($aPath, $id); } } ?> |
Nah dat werkt allemaal prima, behalve wanneer de argeloze gebruiker op z'n browser-'back'-knop gaat lopen drukken. Want als je bij voorbeeld zo'n 'boomstructuur' hebt:
code:
1
2
3
| A,id=1
B,id=2
C,id=3 |
En je navigeert van A naar B naar C, dan zijn de variabelen opeenvolgend:
van A naar B: $id=2; $context=children; $aPath: [1] -> [1,2]
van B naar C: $id=3; $context=children; $aPath: [1,2] -> [1,2,3]
maar als dan ineens iemand op de back knop drukt, dan blijven $id en $context bestaan. Het volgende gebeurt dus, $id en $context zijn dan weer resp. 2 en 'children', terwijl je eigenlijk $id=2 en $context='parent' wilt zien. Dus gaat alles mis want dan wordt het pad als volgt [1,2,3,2] en dan kan dus helemaal niet, met alle nare gevolgen van dien. Hoe vang ik dit nou af?
edit:
oh ja tis belangrijk dat ik niet bij elke refresh gewoon context=related zeg dus altijd gewoon KN_ProbePathToRoot($id) aanroep, welke het pad naar het begin van de opzoekt, want eigenlijk werk ik niet met een boomstructuur. Het is een netwerk van nodes die zowel meerdere children als parents kunnen hebben. Binnen deze chaos breng ik wat structuur aan in de vorm van kleine, tijdelijke boomstructuurtjes. en daarvoor is het belangrijk om te weten wat voor sprong ik binnen het netwerk maak. Een pad naar node 145 kan er bijvoorbeeld zo uit zien [1,4,21,46,112,145], maar ook zo [1,6,21,54,115,145] en da's in geval van mijn app belangrijk.
oh ja tis belangrijk dat ik niet bij elke refresh gewoon context=related zeg dus altijd gewoon KN_ProbePathToRoot($id) aanroep, welke het pad naar het begin van de opzoekt, want eigenlijk werk ik niet met een boomstructuur. Het is een netwerk van nodes die zowel meerdere children als parents kunnen hebben. Binnen deze chaos breng ik wat structuur aan in de vorm van kleine, tijdelijke boomstructuurtjes. en daarvoor is het belangrijk om te weten wat voor sprong ik binnen het netwerk maak. Een pad naar node 145 kan er bijvoorbeeld zo uit zien [1,4,21,46,112,145], maar ook zo [1,6,21,54,115,145] en da's in geval van mijn app belangrijk.