Ik ben bezig met het ontwerp van een handige web-applicatie (backoffice bij website), maar ik loop vast.
Wat ik graag wil is dat er een geschiedenis van dialoogvensters bijgehouden wordt.
Stel je het volgende voor: Je voert gegevens van een gebouw in. Je gaat de architect selecteren, maar die blijkt niet in de database te staan. Je kunt een nieuwe architect toevoegen. Dat kan gelijk vanuit de gebouwen-dialoog. Alle gegevens die je hebt ingevoerd, worden inhouden. Een klik op een button, levert dus altijd een POST-request op.
Als je op annuleren klikt bij het invoeren van de architect, dan kom je netjes terug bij je invoer van een gebouw. Als je de architect hebt ingevoerd, kom je ook weer bij de invoer van het gebouw, maar dan met de nieuwe architect geselecteerd. Hetzelfde verhaal kan gelden voor het onderdeel geboorteplaats, een gegeven van de architect.
Klinkt simpel, maar dat is het niet. Ik heb zo iets al eens succesvol gemaakt door alle forms van voorgaande dialogen in hidden-fields te plaatsen, een soort stack. Als je vanuit het hoofdmenu een architect invoert, dan kom je na die tijd terug in het hoofdmenu (lege stack). Als je vanuit een andere dialoog een architect invoer (of een plaats, of een bron, etc..etc..) kom je weer terug in de voorgaande dialoog.
Aan de hand van de stack worden ook kopjes opgebouwd.
Je ziet bijvoorbeeld: Gebouw toevoegen -> Architect toevoegen -> Plaats toevoegen
Nadeel: Mensen (inclusief ik zelf) hebben de neiging om de back-button van de browser te gebruiken, om terug te gaan. Vaak om te annuleren. Dat wordt erg vervelend met al die post-requests. Oplossing: Post/Redirect/Get-pattern. Zie ook Wikipedia: Post/Redirect/Get
Ik heb het volgende bedacht: Alle dialogen worden in een sessie-array gezet (PHP). Een Post resulteert in het plaatsen van alle data in de sessie-array en een redirect. Aan de hand van de gegevens van het form in de sessie worden deze verwerkt en uit de sessie verwijderd, zodat zaken slechts één keer plaatsvinden. Een refresh (op F5 drukken) is geen enkel probleem, alle gegevens van dialoog en invoer staan in de sessie. Ook de back-button is geen probleem.
Wat wel een probleem is dat mensen twee vensters naast elkaar willen gebruiken. Soms is dat handig. Een sessie hoort bij één browser, maar maakt geen onderscheid tussen verschillende browservensters. Een ander probleem is afsplitsing: Een link kan geopend worden in een nieuw venster, in beide vensters worden dingen ingevoerd en verstuurd, hoe moet er dan gehandeld worden? Bij de eerste invoer na verwerking alle gegevens uit de sessie, zodat een klik in venster 2 resulteert in een foutmelding? Of aan elke link een uniek ID hangen en de complete sessie steeds kopiëren? Ik loop vast in het bedenken van de meest praktische oplossing. Moet gemakkelijk zijn met programmeren, niet afhankelijk van AJAX, maar ook tegen F5-en, back-buttons en het gebruik van meerdere vensters kunnen. Ik ben dan ook benieuwd naar suggesties voor praktische oplossingen.
Wat ik graag wil is dat er een geschiedenis van dialoogvensters bijgehouden wordt.
Stel je het volgende voor: Je voert gegevens van een gebouw in. Je gaat de architect selecteren, maar die blijkt niet in de database te staan. Je kunt een nieuwe architect toevoegen. Dat kan gelijk vanuit de gebouwen-dialoog. Alle gegevens die je hebt ingevoerd, worden inhouden. Een klik op een button, levert dus altijd een POST-request op.
Als je op annuleren klikt bij het invoeren van de architect, dan kom je netjes terug bij je invoer van een gebouw. Als je de architect hebt ingevoerd, kom je ook weer bij de invoer van het gebouw, maar dan met de nieuwe architect geselecteerd. Hetzelfde verhaal kan gelden voor het onderdeel geboorteplaats, een gegeven van de architect.
Klinkt simpel, maar dat is het niet. Ik heb zo iets al eens succesvol gemaakt door alle forms van voorgaande dialogen in hidden-fields te plaatsen, een soort stack. Als je vanuit het hoofdmenu een architect invoert, dan kom je na die tijd terug in het hoofdmenu (lege stack). Als je vanuit een andere dialoog een architect invoer (of een plaats, of een bron, etc..etc..) kom je weer terug in de voorgaande dialoog.
Aan de hand van de stack worden ook kopjes opgebouwd.
Je ziet bijvoorbeeld: Gebouw toevoegen -> Architect toevoegen -> Plaats toevoegen
Nadeel: Mensen (inclusief ik zelf) hebben de neiging om de back-button van de browser te gebruiken, om terug te gaan. Vaak om te annuleren. Dat wordt erg vervelend met al die post-requests. Oplossing: Post/Redirect/Get-pattern. Zie ook Wikipedia: Post/Redirect/Get
Ik heb het volgende bedacht: Alle dialogen worden in een sessie-array gezet (PHP). Een Post resulteert in het plaatsen van alle data in de sessie-array en een redirect. Aan de hand van de gegevens van het form in de sessie worden deze verwerkt en uit de sessie verwijderd, zodat zaken slechts één keer plaatsvinden. Een refresh (op F5 drukken) is geen enkel probleem, alle gegevens van dialoog en invoer staan in de sessie. Ook de back-button is geen probleem.
Wat wel een probleem is dat mensen twee vensters naast elkaar willen gebruiken. Soms is dat handig. Een sessie hoort bij één browser, maar maakt geen onderscheid tussen verschillende browservensters. Een ander probleem is afsplitsing: Een link kan geopend worden in een nieuw venster, in beide vensters worden dingen ingevoerd en verstuurd, hoe moet er dan gehandeld worden? Bij de eerste invoer na verwerking alle gegevens uit de sessie, zodat een klik in venster 2 resulteert in een foutmelding? Of aan elke link een uniek ID hangen en de complete sessie steeds kopiëren? Ik loop vast in het bedenken van de meest praktische oplossing. Moet gemakkelijk zijn met programmeren, niet afhankelijk van AJAX, maar ook tegen F5-en, back-buttons en het gebruik van meerdere vensters kunnen. Ik ben dan ook benieuwd naar suggesties voor praktische oplossingen.