logo

Extra Block Types (EBT) - Nieuwe Layout Builder ervaring❗

Extra Block Types (EBT) - gestileerde, aanpasbare bloktypes: Slideshows, Tabs, Cards, Accordions en vele andere. Ingebouwde instellingen voor achtergrond, DOM Box, javascript-plugins. Ervaar vandaag al de toekomst van layout building.

Demo EBT-modules Download EBT-modules

❗Extra Paragraph Types (EPT) - Nieuwe Paragraphs ervaring

Extra Paragraph Types (EPT) - analoge op paragrafen gebaseerde set modules.

Demo EPT-modules Download EPT-modules

Scroll
16/10/2025, by Ivan

Het ophalen van veldwaarden in entiteiten is vrij eenvoudig, maar er zijn meerdere manieren om dit te doen. Laten we bekijken wat de beste manier is om met veldwaarden te werken in aangepaste code. De meest recente informatie over het werken met velden vind je altijd op de officiële website:

https://www.drupal.org/docs/8/api/entity-api/working-with-the-entity-api

In dit artikel bekijken we voorbeelden van hoe je met waarden kunt werken. 

Je hoeft niet alles te onthouden over hoe specifieke velden werken — je kunt altijd naar deze pagina terugkeren om het te bekijken. Na verloop van tijd zul je vaker naar de documentatie verwijzen en merken hoe eenvoudig het is om met velden te werken in Drupal. Tot die tijd kun je deze pagina als een handige naslaggids bewaren.

Werken met nodes

Een node laden via zijn nid:

$nid = 234; 
$node_storage = \Drupal::entityTypeManager()->getStorage('node');
$node = $node_storage->load($nid);

Node-ID ophalen:

$node->id();

Node/entiteit bundel ophalen:

$node->bundle();   
$entity->getType(); 

Veldwaarden ophalen:

$node->get('title')->value;           
$node->get('created')->value;      
$node->get('body')->value;          
$node->get('body')->summary;         
$node->get('field_foo')->value;     
$node->get('field_image')->target_id;

Je kunt ook een kortere notatie gebruiken om de waarden te verkrijgen:

$node->title->value;
$node->created->value;
$node->body->value;
$node->body->summary;
$node->field_foo->value;
$node->field_image->target_id;

Specifieke nodes laden op basis van een veldwaarde:

$query = \Drupal::entityQuery('node')
  ->condition('type', 'article'),
  ->condition('field_terms', 42);
$nids = $query->execute();
$nodes = $node_storage->loadMultiple($nids);
  
foreach ($nodes as $node) {
  print $node->title->value;
  $node->set('title', "Nieuwe titel voor node");
  $node->save();
}

Waarden in velden wijzigen:

$node->set('title', "Nieuwe titel");
$node->set('body', array(
'summary' => "Teaser",
'value' => "Lange tekst",
'format' => 'basic_html',
));
$node->save();

Voor velden met één enkele waarde kun je ook een kortere notatie gebruiken:

$node->title = 'Nieuwe titel';
$node->field_text = 'tekst';

Waarden ophalen van meerdere velden:

$nids = \Drupal::entityQuery('node')->condition('type', 'album')->execute();
$nodes = Node::loadMultiple($nids);
 
$data = array();
foreach($nodes as $node) {
  $photo = array();
  foreach($node->get('field_image')->getValue() as $file){
    $fid = $file['target_id']; // bestand fid ophalen
    $photo[] = \Drupal\file\Entity\File::load($fid)->getFileUri();
  }
 
  $data[] = array(
    'album_name' => $node->get('field_album_name')->getValue(),
    'place' => $node->get('field_place')->getValue(),
    'author' => $node->get('field_author')->getValue(),
    'photo' => $photo,
  );
}

Werken met bestandsvelden

Bestanden worden aan andere entiteiten toegevoegd via referentievelden, en wanneer we toegang krijgen tot deze velden, kunnen we het bestands-ID ophalen en vervolgens informatie over het bestand verkrijgen via dat ID.

Een bestand ophalen via ID:

$fid = 42; 
$file_storage = \Drupal::entityTypeManager()->getStorage('file');
$file = $file_storage->load($fid);

Het bestandsobject ophalen uit een veld van een node:

$file = $node->field_image->entity;

Enkele velden van een bestandsobject ophalen:

$file->getFileUri();   // "public://file123.jpg"
// Omzetten naar een bestands-URL vanuit een URI:
file_url_transform_relative(file_create_url($file->getFileUri()));   
// "/sites/default/files/public/file123.jpg"
$file->filename->value;   // "file123.jpg"
$file->filemime->value;   // "image/jpeg"
$file->filesize->value;   // 63518 (grootte in bytes)
$file->created->value;    // 1511206249 (Unix timestamp)
$file->changed->value;    // 1511234256 (Unix timestamp)
$file->id();

Je kunt de eigenschappen van een bestand bekijken (zoals beschikbaar in de tabel file_managed):

echo $file->uid->target_id;               // 1
echo $file->uid->value;                   // Werkt niet! Gebruik target_id.
echo $file->uid->entity->name->value;    
echo $file->uid->entity->timezone->value; // "Asia/Omsk"

Werken met Entity Reference-velden

Je kunt meerdere waarden uit referentievelden ophalen en ze doorlopen met foreach:

foreach ($node->field_my_entity_reference as $reference) {  
  print $reference->target_id;  
  print $reference->entity->title->value;  
}

Een Entity Reference-veld met meerdere waarden wijzigen:

$nids = [3,4,5,6];  
$node->set('field_my_entity_reference', $nids);
$node->save();

Nieuwe waarden toevoegen aan een bestaand Entity Reference-veld:

$nids = [3,4,5,6];   // voorbeeldwaarden
foreach ($nids as $nid) {
  $node->field_my_entity_reference[] = [
    'target_id' => $nid
  ];
}
$node->save();

Oude en nieuwe waarden in velden vergelijken

FieldItemListInterface (de klasse achter elk veld) heeft een methode equals():

/**
 * Implements hook_entity_update().
 */
function mymodule_entity_update(\Drupal\Core\Entity\EntityInterface $entity) {
  // Controleren of de entiteit het veld daadwerkelijk heeft.
  if (!$entity->hasField('field_wikipage_access') || !isset($entity->original)) {
    return;
  }

  $new_values = $entity->get('field_wikipage_access');
  $old_values = $entity->original->get('field_wikipage_access');

  // Snelle booleaanse controle: gewijzigd of niet?
  if ($new_values->equals($old_values)) {
    return;  // Niets veranderd, stoppen.
  }

  // …anders doorgaan (zie hieronder).
}

Werken met Paragraphs

$my_paragraph = null;
  
foreach ($node->get('field_paragraph_reference') as $paragraph) {
  if ($paragraph->entity->getType() == 'your_paragraph_type') {  
    $my_paragraph = $paragraph->entity;
  }
}
  
if (!empty($my_paragraph)) {
  print $my_paragraph->field_somefield->value;
  
  print $my_paragraph->title->value;  // Werkt niet!
} 
else {
  print "De node heeft dit paragraph-type niet.";
}

Het type paragraph ophalen:

$my_paragraph->getType();

We zullen deze voorbeelden in de toekomst gebruiken bij het schrijven van aangepaste modules die werken met hooks en entiteitobjecten.