10 december 2010

Drupal 6 vs Drupal 7

development

Het mooie van een open source framework als Drupal is het voortschrijdend inzicht van de gehele community te kunnen gebruiken voor nieuwe releases. Nog mooier is de gebundelde kracht van deze community: met z’n tienduizenden bouwen aan een nieuwe release. Sneller dan verwacht, is op 1 december j.l. de eerste release candidate verschenen van Drupal 7.

Er is op het eerste gezicht aardig wat veranderd in Drupal 7 ten opzichte van zijn voorganger. Als een van de eerste dingen valt op dat veel modules naar de core van Drupal zijn verhuisd. Met een standaard installatie heb je nu onder meer beschikking over een uitgebreid Dashboard, de Content Construction Kit die is hernoemd naar Fields en kun je inloggen via OpenID.

Maar nog belangrijker voor de gebruikerservaring zijn de shortcuts die in Drupal 7 via het CMS instelbaar zijn: met een handomdraai maak je linkjes aan die verwijzen naar veelgebruikte pagina’s in het CMS. En ook het navigeren in de backend is sterk verbeterd en versneld via de core module Overlay. Via AJAX worden de pagina’s namelijk direct ingeladen, in plaats van te wachten op een page refresh.

De tabjes die boven nodes verschenen in Drupal 6 hebben plaats gemaakt voor een menuutje dat met een mouseover geactiveerd wordt. Het klikken op ‘configure block’ resulteert niet in het verlaten van de huidige pagina – zoals in Drupal 6 het geval is - maar het configuratiescherm wordt op dezelfde pagina direct via AJAX in een overlay ingeladen. Zodra je annuleert of opslaat, fade de overlay uit en zie je direct de aangepaste content.

Hoewel deze gebruikersverbeteringen allemaal heel leuk en aardig zijn voor onze klanten, is het voor ons als developers natuurlijk van primair belang om te kijken naar de verschillen in code tussen de twee versies. Zoals we van Drupal gewend zijn, is backwards compatibility namelijk geen groot goed. Liever groeit Drupal in termen van functionaliteit, leesbaarheid, gebruikerservaring en schoonheid in code, dan dat het met veel moeite en omwegen tracht om de nieuwe code ook voor oude installaties beschikbaar te maken. Een groot voordeel verpakt in een nadeel dus.

Het meest in het oog springende aan het ‘Nieuwe Drupallen’ is zonder meer de manier waarop de database aangesproken wordt. Waar we eerst onze queries in SQL opbouwden, is nu een fluent API voor in de plaats gekomen die ook nog eens object georienteerd is. Een fluent API valt te omschrijven als een object waarbij alle methods het object zelf teruggeven, hetgeen ‘method chaining’ toestaat. In dit specifieke geval zijn er voor elke database operatie verschillende methods geimplementeerd. Zo hebben we een db_insert, een db_select, een db_transaction en meer.  Deze methods verwachten dus geen SQL statement, maar een variabel aantal parameters. Een voorbeeld:

Drupal 6:
$query = db_query("SELECT uid, name FROM {users} u WHERE uid <> 0 ORDER BY name ASC LIMIT 50");

Drupal 7:
$users = db_select('users', 'u')->condition('u.uid', 0, '<>')->fields('u', array('uid', 'name'))->range(0,50)->orderBy('name')->execute();

Hoewel  uit de voorbeelden duidelijk wordt dat de abstractielaag in Drupal 7 groter is dan in Drupal 6 het geval was, kan ik uit ervaring spreken dat het de leesbaarheid verbetert, maar vooral het verspreiden van queries stukken eenvoudiger wordt. Zo kan ik in functie A een deel van de query uitvoeren waarbij de ordening en joins worden bepaald en kan ik in functie B aangeven welke tabellen en velden ik wil uitlezen. Belangrijk hierbij is dat de volgorde niet uitmaakt. Ik kan dus eerst de ordening en limit aangeven, en pas daarna de tabel en de velden. Pas als de ‘execute’ method wordt uitgevoerd, wordt de database aangesproken.

Een vraag die nu voor de hand ligt, is of het beter zou zijn om nieuwe websites in Drupal 7 te starten, of voorlopig te blijven bij Drupal 6? Omdat Drupal een ‘community driven’ project is, en de functionaliteiten allemaal in modules geintegreerd zijn, is het devies simpel: blijf bij Drupal 6 totdat de belangrijkste bestaande modules geconverteerd zijn naar het nieuwe platform. Pas op de grote D-day, wanneer Drupal 7.0 officieel uitkomt, betaalt het zich terug om over te stappen. Want op dit moment zou je de kracht van de Drupal community verliezen wanneer je overstapt.

Een goed slotadvies is om in de tussentijd niet stil te zitten en zoveel mogelijk te helpen bij het converteren van modules naar Drupal 7, zeker omdat het mes aan twee kanten snijdt. Ten eerste help je de Drupal community een handje met de overgang naar Drupal 7 en ten tweede raak je zelf bekend met de nieuwe API en backend.

Geschreven door: Bas van der Heijden
Cookies?

We gebruiken cookies om het functioneren van onze website te verbeteren. De gegevens worden volledig anoniem verzameld.