Meldingen na een actie
Wie iets opslaat, wil weten of het gelukt is. Na elke handeling die de database raakt — opslaan, verwijderen, een mislukte controle — verschijnt bovenaan het scherm een melding die vertelt wat er gebeurd is.
- Er zijn vier soorten, elk met een eigen kleur: een bevestiging, een fout, een waarschuwing en een neutrale toelichting.
- Een melding blijft staan tot je hem wegklikt; er is een sluitknop.
- Er kunnen er meerdere tegelijk klaarstaan. Ze verschijnen dan onder elkaar, in de volgorde waarin ze zijn ontstaan.
- Een melding overleeft precies één paginawissel. Daarna is hij weg — hij komt niet terug bij een verversing en staat nergens opgeslagen.
De vier soorten. Welke je kiest bepaalt de kleur, en die kleur moet de strekking van het bericht al verraden voordat iemand de tekst leest.
| Soort | Wanneer | Kleur | Voorbeeld |
|---|---|---|---|
| Bevestiging | de actie is geslaagd | groen | "De taak is bijgewerkt." |
| Fout | de actie is niet doorgegaan | rood | "Geef de afbeelding een titel." |
| Waarschuwing | de actie ging door, maar er is iets te weten | geel | "Dit project heeft nog taken; archiveer het." |
| Toelichting | neutrale informatie | blauw | — |
Waarom het niet gewoon in de URL staat. Na een formulierverzending stuurt de applicatie de browser altijd door naar een volgende pagina, zodat terugbladeren of verversen niet nog eens hetzelfde opslaat. Dat betekent wel dat het scherm dat de melding toont een ánder scherm is dan het scherm dat de actie uitvoerde. De tekst reist daarom mee in de sessie in plaats van in de URL: geen leesbare parameters in de adresbalk, geen melding die blijft hangen als iemand de link doorstuurt of opnieuw laadt.
Technische werking. De klasse Flash in src/Core/ is het hele
mechanisme. Een controller zet één regel neer — Flash::success(),
Flash::error(), Flash::warning() of Flash::info() — en is daarmee klaar.
De view haalt de klaarstaande meldingen bij het opbouwen van elke pagina op met
Flash::pull(), dat ze in dezelfde beweging leest én wist; dat wissen is
precies wat maakt dat een melding één keer verschijnt en niet nog eens.
Vervolgens zet de lay-out ze automatisch bovenaan het scherm, zonder dat een
scherm daar iets voor hoeft te doen. De soorten heten success, danger,
warning en info — de namen van de Bootstrap-alertvarianten — zodat de
kleur rechtstreeks uit het type volgt en er geen aparte vertaaltabel nodig is.
Een onbekend type valt terug op info in plaats van een fout op te leveren:
een melding met de verkeerde kleur is beter dan een pagina die breekt. De
opslag is de sessie en niet de database (Datamodel),
want een melding is een gebeurtenis van dit moment en van deze bezoeker, geen
gegeven dat bewaard hoort te blijven. De code is Engels, de meldingteksten zelf
zijn Nederlands — dezelfde scheiding als in de rest van het prototype, zie
Technische architectuur.
Wat er nog niet is. Alle meldingen komen bij een paginawissel in beeld. Een actie die zonder herladen gebeurt — een kaart verslepen op het bord, zie Kaarten verslepen — kan er dus niets mee; daarvoor is een variant nodig die in de browser zelf een melding toont. Ook volgen de meldingen nu de standaardkleuren van Bootstrap en niet de huisstijl van het bord.