Wij zijn momenteel bezig met een mooi project waar Drupal voornamelijk voor backend content management ingezet gaat worden. Het frontend zal ontwikkeld worden in Knockout JS.
Om gegevens uit te wisselen tussen deze twee systemen bouwen we een API in Drupal met behulp van de 'Services' module. We zullen gegevens via een 'RESTful' API uitwisselen.
Momenteel zijn we bezig met modelleren van de data: het definiëren van content types en fields.
Hierin ziet het content type 'Story' er in concept als volgt uit:
(Mooi handschrift hè ;-) )
Set van gegevens
Zoals je ziet krijgen we te maken met sets van items binnen een stuk content. Dus content manager moet een oneindig veel 'sory sets' aan kunnen maken binnen de story. Dit wordt gebruikt om voor de website bezoeker een pagina te beheren, die er grof gezien als volgt uit ziet:
Hierin krijgen we dus veel te maken met sets van content. Een voor de hand liggend keuze voor het beheren hiervan in het Drupal cms is de module 'Field collection' . Daarmee kan je sets van fields binnen één content type definiëren en vervolgens content hierin gebruikersvriendelijk laten beheren.
Wanneer je een relatief eenvoudig Drupal systeem hebt, dan is de 'Field collection' module een prima keuze, er zijn niet voor niets bijna 700.000 downloads en bijna 100.000 Drupal installs.
Ook de module Multifield zou interessant kunnen zijn, deze is alleen nog in Alpha1 versie en dus niet inzetbaar op een productie omgeving.
Waarom compound fields
Maar in dit project gaat het voornamelijk om het bouwen van een RESTful API. Dan is de 'Field collection' module wat omslachtig, daar kom je vrij snel achter zodra je de API gaat programmeren. Wij geven in dit geval de voorkeur aan 'compound fields'
Wij kiezen voor Compound fields in plaats van Field collection:
Data van één set geclusterd in één tabel database, ipv verschillende
Minder overhead: geen extra entiteit
Drupal systeem is leniger: beter schaalbaar, betere performance
Configureren vs programmeren
Field collections zijn relatief eenvoudig te configureren, compound fields moet je zelf middels code definiëren. Je bent initieel zeker meer tijd kwijt hierdoor, maar dit haal je later in het project heel snel in. Je data wordt consistenter weg gezet in de database en je hebt de flow van data zelf in de hand.
Ik zal in een volgend blog de technische implementatie toelichtingen. Kan je niet wachten: raadpleeg de Field example module uit de Drupal core.