Een beschrijving van de belangrijkste iteraties die we hebben doorgevoerd en uitkomsten. Wat leidde ertoe en wat was de uitkomst?
We hebben de folder structure gewijzigd (wat werkt het beste?) --> algemene layout van gehele pagina's in 'pages', navigatie in 'navigation' en de verdere content in aparte mappen (zoals: 'Events').
We hebben de previewmodus gewijzigd
We hebben 'preview templates' toegevoegd aan de componenten (waardoor je de content van een component in de visual editor kan zien)
We hebben de user roles aangepast
We hebben de filenames en componenten in het CMS vertaald naar het Nederlands
Veelal from scratch wat placeholdertext gebruikt om de functionaliteiten mee te testen.
Dit hebben wij uiteraard wel rechtgetrokken na het applyen van de algehele styling.
Om aan content-editors te kunnen tonen welke aanpassingen ze aan het doen zijn is het handig om direct feedback te tonen (iets wat uiteindelijk ook terug kwam uit de user test, waarover je later meer kan lezen). In eerste instantie hadden we ervoor te kozen om hier veel te leunen op JavaScript zodat je dus live die aanpassingen kan tonen. Echter, dit maakte dat we elk component twee keer moesten bouwen als het ware, eenmaal in HTML/Nunjucks en eenmaal als Javascript component waardoor je de volgende situatie kreeg:
Hoewel dit maakte dat de preview omgeving inderdaad live kon updaten maakte het dat we de website als het ware moesten hijacken met JavaScript zodra het in de preview omgeving zit.
Dat is natuurlijk iets wat mogelijk is maar dit zorgt voor veel extra werk voor developers en dat is iets wat we willen vermijden om de drempel voor nieuwe developers laag te houden. Daarom hebben we besloten dat we met een andere oplossing moesten komen. Het eerste waar we op kwamen is het aanmaken van een aparte preview branch die dan vanuit het CMS te updaten is.
Echter, dit zorgde ervoor dat een content-editor bij elke aanpassing die hij of zij wilt zien vanuit de pagina waar die aan bezig is naar de tasks moet binnen het CMS, op 'deploy preview' moet klikken, 30 seconden moet wachten om vervolgens de pagina te refreshen. Dit zorgt voor de content-editor weer voor heel veel extra overhead. Onze laatste oplossing was dat we op de preview branch ervoor zorgden dat de preview branch wordt geüpdatet wanneer een content-editor op 'save' klikt. Ook komt er dan een melding in beeld en refresht de pagina na 30 seconden:
Het modular-content component is misschien wel het belangrijkste component van de hele website. Hierin kunnen namelijk alle componenten ingeladen worden vanuit het CMS en weergegeven worden op een pagina. In eerste instantie hadden we een component gebouwd met veel ifjes in de layout om zo te kunnen bepalen welke elementen getoond worden (zie onderstaande snippet).
Als je weinig componenten hebt is dit nog overzichtelijk. Echter toen we meer componenten kregen liepen we er tegenaan dat het voor de developer onoverzichtelijk wordt met al die if-statements in de markup. Daarom heeft Gijs toentertijd een slimmere oplossing gebouwd waar elk component een soort slug mee kreeg van welke map het component in te vinden is. Hierdoor hoefden we in de markup alleen maar te loopen over de content en konden we de componenten dynamisch importeren en implementeren:
Hoewel de bovenstaande oplossing voorkwam dat we allemaal if-statements in de markup hadden staan maakte het wel dat we elk component moesten behandelen als een macro die we dan altijd component moesten noemen, dit maakt dat je het nog duidelijker zou moeten documenteren.
Ook zorgde dit ervoor dat als iemand in Storyblok een component zou maken en implementeren in een pagina maar het HTML bestand niet bestaat binnen de codebase dat dan de build faalt, ook wanneer je slechts aan het developen bent. Dit zorgt ervoor dat de workflow stroperig wordt wanneer je met meerdere mensen tegelijk aan het ontwikkelen bent.
Uiteindelijk hebben we daarom gekozen om terug te gaan naar de if-statements oplossing omdat we toch vonden dat dit de meest duidelijke manier is om de componenten te implementeren zonder dat er veel 'magie' under the hood gebeurt, het ziet er nu als volgt uit:
Dit maakt dat we niet alleen macro's hoeven te gebruiken maar dat we ook componenten kunnen 'includen', dit is eveneens iets waar we tegenaan liepen met de vorige oplossing.