[PHP] vervelende back-knop

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

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
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:
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.



  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
hm een deel heb ik nu opgelost, wanneer je eerst children kiest, dan weer children, en dan back klikt, gaat het nu goed, dankzij deze toevoeging:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?
case "children":
        {
            //check if $id isn't already in the path:
            if(!in_array($id, $aPath))            
            { 
                // it's not there, append id to path:
                array_push($aPath, $id);
            }
            else
            {
                //pop id's off the path until $id is found
                do
                {
                    array_pop($aPath);
                } while(end($aPath)!=$id);
            }
                        
            break;
        }
?>

maar van children naar siblings en dan back gaat nog steeds mis. maar daar moet dus ook wel wat op te vinden zijn. wel cool eigenlijk dat ik m'n probleem pas goed begin te snappen nadat ik het heb proberen uit te leggen :)

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 17:42

Gerco

Professional Newbie

Een echte oplossing is het niet, maar is dit niets?:
code:
1
<h1>DO NOT USE YOUR BROWSER'S BACK BUTTON!</h1>

Ik heb al op meerdere sites zoiets zien staan. Blijkbaar zijn er toch bepaalde problemen mee die niet goed op te lossen zijn.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Verwijderd

[HEEL SLECHT IDEE!]
Kun je niet je script automatisch laten herladen als history.back de referer is ofzo?

Pak de referer; als dat history.back is, een header location.reload doen ofzo?

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

PHP:
1
2
3
4
5
6
7
8
9
<?
function nocache()
{
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . "GMT");
    header("Cache-Control: no-cache, must-revalidate");
    header("Pragma: no-cache");
}
?>

Back button werkt dan niet meer... Hij vraagt altijd om te herladen.....

Programmer - an organism that turns coffee into software.


Verwijderd

Dat is het denk ik!

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
dankjewel!
ik ga meteen proberen!

edit:
hmm, tsja ik had kunnen weten dat dit niet zoveel helpt. ik refresh het ding namelijk sowieso altijd handmatig met javascript (weer om een andere reden). En als ik het goed bekijk ligt het ook niet zozeer aan de vervelendheid van de back-knop, maar gewoon aan slordig programmeerwerk. Het moet te onderscheppen zijn...
Pagina: 1