Ga naar hoofdinhoud

Contacteer ons op +32 2 306 02 11 of mail ons op info@desk02.be

Drupal 7 Concepten: Entities, Bundles, Fields en meer

Introductie

Sinds kort zijn we bij Desk02 begonnen met Drupal 7 opleidingen te geven en daarvoor moest ons lesmateriaal geüpdate worden. Een deel van de opleiding behandelt de concepten in Drupal en die zijn heel wat veranderd in Drupal 7.

Drupal 6

In Drupal 6 had je de volgende dingen:

  • Nodes
  • Users
  • Comments
  • Blocks
  • Taxonomies

Elk van deze redelijk onafhankelijke concepten had ook zijn eigen API om ermee te interageren.

Daarnaast had je in Drupal 6 twee manieren om nieuwe soorten content aan te maken. De eerste soort is die dat ondersteund wordt door Drupal core. Met de node API kan je informatie in zelf beheerde tabellen ophalen en aan het node object toevoegen. Zie hiervoor bijvoorbeeld naar de Poll module die een Poll content type definiëert met extra info zoals "runtime" dat aangeeft hoe lang de poll open moet blijven en "active" of de poll open is. De Forum module beheert ook zijn eigen tabel die de categorisatie van de fora beheert.

De tweede manier om nieuwe content types met meer informatie dan een titel en een body aan te maken in Drupal 6 is met de CCK module. Deze module laat je toe om veldje per veldje aan een custom content type te hangen om zo het gewenste resultaat te bekomen.

Beide aanpakken hebben hun voor- en nadelen. De CCK oplossing resulteert in een complexe DB structuur met veel tabellen en kan traag worden terwijl als je zelf je tabellen beheert dit normaal een heel stuk sneller moet zijn. Als je veel data moet importeren of updaten met externe data kan het gebruik van node API aangeraden zijn.

Al deze informatie heb ik proberen te condenseren in een overzichtelijk schema:

Overzicht van concepten in Drupal 6

Drupal 7

In Drupal 7 zijn deze concepten echter helemaal door elkaar geschud. Een vaak gevoerde discussie tijdens en voor Drupal 6 was of dat comments en users en taxonomieën eigenlijk ook geen nodes zouden moeten zijn zodat er ook extra veldjes aan konden gehangen worden via CCK. Om dat te bekomen werden er reeds een heleboel modules ontwikkeld zoals nodeprofile en NAT.

Entities

Eén van de grote features van Drupal 7 was dat CCK geïntegreerd werd in de basis installatie van Drupal. Dit resulteerde in de nieuwe Fields API. Daar de vraag om van comments en dergelijke ook nodes te maken om er velden aan te kunnen hangen zo groot was werd er in Drupal 7 teglijkertijd ook een nieuw concept geïntroduceerd: entities.

Een entity kan je bekijken als de basisstructuur voor specifieke content. De node entity ondersteunt content met typisch een titel, een auteur, een datum van creatie, etc. De node entity is ook fieldable wat wilt zeggen dat het mogelijk is om er extra veldjes aan te hangen.

Niet alleen nodes zijn entities geworden, al de volgende dingen zijn in Drupal 7 entities geworden:

  • Nodes
  • Comments
  • Files
  • Taxonomy terms & vocabularies
  • Users

Blocks blijven op dit moment nog een onafhankelijk concept.

Samen met het entity concept is er ook de Entity API bijgekomen die je toelaat om zelf nieuwe entities te definiëren. Als de structuur van je content te sterk afwijkt van één van de bestaande entities maak je nu gewoon je eigen entity. Dit kan je dus bekijken als een derde manier om anders gestructureerde content in Drupal te krijgen. Een voorbeeld hiervan is bijvoorbeeld de entity Product die wordt aangemaakt als je Drupal Commerce installeert.

Bundles

Het bundle concept is ook gewoon een generalisatie van het content type concept in Drupal 6. Daar had je de content types Story en Page. Deze zouden in Drupal 7 bundles van het entity type node genoemd worden.

Een bundle is dus een instantie van een entity type samen met de veldjes die erbij horen en de configuratie ervan. Dat wilt dus zeggen dat er ook bundles zijn van andere entity types dan het node entity type. In een Drupal 7 installatie worden er voor elke soort comments ook bundles aangemaakt en heb je standaard een user bundle van het entity type user.

Fields en Field instances

Aan een fieldable entity kan je veldjes hangen. Van zodra een veldje aan een bundle wordt toegewezen spreekt men eigenlijk van een field instance. Het veldje zelf is ook een concept dat op zijn eigen bestaat. Het verschil tussen deze zaken is belangrijk omdat men ook spreekt over field settings en field instance settings. Je kan dus verschillende zaken instellen op elk van de niveaus.

Een voorbeeld. Stel dat je een veld field_illustraties hebt dat je gaat gebruiken om aan artikels en pages beeldjes te hangen. Als je dat ene veldje voor beide gaat gebruiken moet je beslissen hoeveel illustraties je aan die bundles gaat hangen. Je kan niet beslissen om het aantal op één te zetten voor pages en op drie voor artikels daar het aantal (cardinality) een setting is op field niveau. Als je andere aantallen wilt per content type dan zal je aparte velden moeten gebruiken. De label van een veldje kan je echter wel onafhankelijk aanpassen. Voor artikels zou je dus het label "Artikel illustraties" kunnen gebruiken en voor pagina's "Pagina illustraties". Het label is namelijk een field instance setting.

Slot

Hopelijk heb ik met dit artikel de nieuwe concepten in Drupal 7 een beetje duidelijk gemaakt. Ik had er alleszins wat last mee en dat maakte het moeilijk om wegwijs te raken in de nieuwe documentatie.

Ook de Drupal 7 concepten heb ik proberen samen te vatten in een overzichtelijk schema:

Overzicht van concepten in Drupal 7

Desk02 kan dit allemaal in geuren en kleuren komen uitleggen op jouw bedrijf of gespecialiseerde lokatie. Neem contact met ons op als je geïnteresseerd bent.

BijlageGrootte
d6_schema.png94.24 KB
d6_schema_small.png77.72 KB
d7_schema.png182.04 KB
d7_schema_small.png115.96 KB

Tags: Drupal 7

Reacties

Nieuwe reactie inzenden

De inhoud van dit veld is privé en zal niet openbaar worden gemaakt.
  • Adressen van webpagina's en e-mailadressen worden automatisch naar links omgezet.
  • Toegelaten HTML-tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Regels en paragrafen worden automatisch gesplitst.
  • U kan syntax highlighting toepassen door gebruik te maken van volgende tags: <code>, <blockcode>, <c>, <cpp>, <drupal5>, <drupal6>, <java>, <javascript>, <php>, <python>, <ruby> De ondersteunde tag formaten zijn: <foo>, [foo]