Hoe structureer je een website

Moeilijkheidsgraad

Drupal heeft inhoudstypes, velden, veldverzamelingen, views (overzichten), relaties, filters,.... Voor een complexe site is het een kunst om op den duur, de juiste structuur te vinden.

Het is een denkoefening die ik reeds maakte toen ik ook les gaf over relationele databases. Daar spreken ze van 'normalisering' van de  gegevens in tabellen en velden. De gelijkenis is treffend. Drupal heeft een databasestructuur, waar de inhoudstypes, tabellen zijn en de velden ook velden genoemd worden. Een view is eigenlijk niets anders dan een SQL query. Je kunt dit zelfs zichtbaar maken in views.

Het is dank zij mijn ervaring in deze materie dat ik dit 5 sterren onderwerp durf aan te snijden, aan de hand van een voorbeeld: Muziekalbums

Bvb Abbey Road door de Beatles heeft 'Here comes the sun' en 'Her Majesty'.

Eerst maak je de structuur zonder de velden. Je doet dit top-down. Een album wordt gemaakt door een groep en bevat verschillenden songs. Een groep bevat verschillende artiesten.

Drupal8_001812.png

Wat kan je van deze structuur verwachten? Je hebt 4 inhoudstypes. Album, songs, groepen en artiesten. Eerst maak je artiesten, je kent die toe aan een groep. Daarna maak je het inhoudstype songs en uiteindelijk maak je het inhoudstype albums waarbij je refereert naar de songs en de groep. De velden zijn logisch. De geboortedatum en foto van de artiest zitten in het inhoudstype artiesten. Misschien ook met een opsomming van het aantal instrumenten dat hij/zij bespeelt. Het jaar van de release van het album zit bij het album. Hoe een song ontstaan is zit bij de songs. Klaar.

Kan men via deze structuur weten wie er in welke song welk instrument speelt of zingt? NEEN! Elke song wordt door de groep uitgevoerd in dit scenario. We moeten de groep uit de verzameling verwijderen.

Drupal8_001813.png

Deze structuur laat toe om per song, de deelnemende artiesten te selecteren. Dit geeft meer werk dan in het eerste scenario.

Drupal8_001814.png

Waar koppel je het inhoudstype 'Muziekgroep' nu? Deze bevat alle informatie over de Beatles, gaande van hun ontstaan, leden, foto's,...enz. In dit geval zou je het kunnen koppelen aan het album. Abbey Road is van de Beatles. Er zijn echter ook albums die een compilatie zijn van verschillende groepen (Romantic songs versie 672...) Beter is dus om per song de groep in te vullen. In je view kunnen dan alle groepen getoond worden die songs hebben geleverd.

Drupal8_001815.png

Hoe kunnen we nu weten wie er, welk instrument speelde of zong, in een bepaald lied?

Dat Paul McCartney kan zingen en gitaar speelt, is niet relevant. Hij zingt niet op elke song en speelt ook niet overal gitaar. We moeten eigenlijk naar 2 zaken tegelijkertijd refereren. Naar de artiest én naar zijn functie. Dit is waar veldverzamelingen voor dienen. We maken een veldverzameling 'performer' die de velden bevat naar de artiest en ook de zang/instrumenten bevat.

Drupal8_001817.png

Onze ruwbouw is af. Nu gaan we de velden toekennen aan onze structuur.

De Artiesten

Drupal8_001818.png

De veldverzameling 'Performance'


Drupal8_001819.png

De Songs. Merk op dat je met de veldverzameling naar 2 velden tegelijkertijd refereert. Ook de referentie naar de groep ligt hier om verzamel albums toe te laten.


Drupal8_001822.png

De Albums. Je voegt meervoudig songs toe. Door de referentie van de songs naar de artiesten en hun instrumenten, haal je alles binnen.


Drupal8_001821.png

In een view moet je nu met relaties de inhoudstypes combineren.

Drupal8_001824.png

Je moet natuurlijk relaties gebruiken. Zelfs relaties die op andere relaties berusten. Logisch. Je zit met 4 niveau's, dus heb je 3 relaties. Enkel het hoogste niveau heeft geen relaties nodig.

 

Drupal8_001825.png

Door deze relaties krijg je wat men noemt in databasetermen, een scalair product. Je krijgt per song de titel, afbeelding, ... van het album te zien. Dit los je op door op deze velden te groeperen.


Drupal8_001826.png

Conclusie:

Dé manier om je site te structureren bestaat niet. Het is afhankelijk van wat je wilt. Schets op voorhand op papier wat je wilt zien en ga dan Top-down te werk. Bottum-up gaat ook maar dan erf je alles van wat je in een onderliggend inhoudstype toont. Dit is niet altijd de bedoeling. Merk ook op dat al naar gelang de methode, je soms stukken meer werk hebt om in te putten. Let ook op met relaties in views. Het vertraagt en het maakt de zaak complex. In extreme gevallen waar je bijvoorbeeld kiest voor snelheid kan je kiezen om het oud systeem te gebruiken. Daar maak je één inhoudstype aan waar je alle velden in brengt. Je krijgt dan bvb veld song1 waar artiest1a artiest 1b, song2 met artiest2a, artiest 2b,..Je kunt wel refereren naar het inhoudstype artiesten, maar je beperkt de structuur tot één centraal inhoudstype waar de anderen één echelon ver gaan. Nadeel van dit systeem is dat je op voorhand bepaalt hoeveel artiesten je voorziet. Heb je 4 velden voorzien voor de artiesten, kan je er geen 5 van maken. Meervoudig bestaat dan niet. Je hebt ook enorm veel velden nodig. Een view wordt dan daar vooral een uitdaging, maar moeilijk is het niet. Het is vooral veel werk.