logo

Extra Block Types (EBT) - Neue Erfahrung im Layout Builder❗

Extra Block Types (EBT) - gestylte, anpassbare Blocktypen: Diashows, Registerkarten, Karten, Akkordeons und viele andere. Eingebaute Einstellungen für Hintergrund, DOM Box, Javascript Plugins. Erleben Sie die Zukunft der Layouterstellung schon heute.

Demo EBT-Module EBT-Module herunterladen

❗Extra Absatztypen (EPT) - Erfahrung mit neuen Absätzen

Extra Paragraph Types (EPT) - analoger, auf Absätzen basierender Satz von Modulen.

Demo EPT-Module EPT-Module herunterladen

Scroll
27/05/2025, by Ivan

Das Abrufen von Feldwerten in Entities ist ziemlich einfach, aber es gibt mehrere Möglichkeiten, dies zu tun. Schauen wir uns an, wie man am besten mit Feldwerten im eigenen Code arbeitet. Die neuesten Informationen zur Arbeit mit Feldern finden Sie immer auf der offiziellen Webseite:

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

In diesem Artikel betrachten wir Beispiele für die Arbeit mit Werten.

Sie müssen sich nicht merken, wie bestimmte Felder funktionieren, Sie können jederzeit auf diese Seite zurückkommen und es nachschlagen. Mit der Zeit werden Sie immer öfter die Dokumentation nutzen und feststellen, wie einfach es ist, mit Feldern in Drupal zu arbeiten. Zwischenzeitlich können Sie diese Seite als Lesezeichen speichern, um immer eine praktische Referenz zur Hand zu haben.

Arbeiten mit Nodes

Node nach nid laden:

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

Node-ID erhalten:

$node->id();

Node-/Entity-Bundle erhalten:

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

Feldwerte erhalten:

$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;

Sie können auch eine Kurzschreibweise zur Werteabfrage verwenden:

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

Bestimmte Nodes anhand von Feldwerten laden:

$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', "Neuer Titel für den Node");
  $node->save();
}

Werte in Feldern ändern:

$node->set('title', "Neuer Titel");
$node->set('body', array(
  'summary' => "Teaser",
  'value' => "Langer Text",
  'format' => 'basic_html',
));
$node->save();

Auch bei Feldern mit nur einem Wert kann man die Kurzschreibweise verwenden:

$node->title = 'Neuer Titel';
$node->field_text = 'Text';

Werte mehrerer Felder erhalten:

$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']; // Datei-FID holen
    $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,
  );
}

Arbeiten mit Datei-Feldern

Dateien werden anderen Entities über Referenzfelder hinzugefügt. Beim Zugriff auf diese Felder kann man die Datei-ID erhalten und dann die Datei-Informationen anhand dieser ID abrufen.

Datei anhand der ID laden:

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

Dateiobjekt aus dem Node-Feld erhalten:

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

Einige Felder des Dateiobjekts erhalten:

$file->getFileUri();   // "public://file123.jpg"
// Kann in URL umgewandelt werden von 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  (Größe in Bytes)
$file->created->value;    // 1511206249  (Unix-Zeitstempel)
$file->changed->value;    // 1511234256  (Unix-Zeitstempel)
$file->id();

Sie können verfügbare Datei-Eigenschaften aus der Tabelle file_managed wie folgt anzeigen:

echo $file->uid->target_id;               // 1
echo $file->uid->value;                   // Funktioniert nicht! Verwenden Sie target_id.
echo $file->uid->entity->name->value;    
echo $file->uid->entity->timezone->value; // "Asia/Omsk"

Arbeiten mit Entity-Referenzfeldern

Mehrere Werte aus Referenzfeldern können per foreach verarbeitet werden:

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

Entity-Referenzfeld mit mehreren Werten ändern:

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

Neue Werte zum Entity-Referenzfeld zu bestehenden Werten hinzufügen:

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

Arbeiten mit Paragraphen

$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;  // Funktioniert nicht!
} 
else {
  print "Der Node hat diesen Paragraph-Typ nicht.";
}

Paragraph-Typ ermitteln:

$my_paragraph->getType();

Diese Beispiele werden wir zukünftig nutzen, um eigene Module mit Hooks und Entity-Objekten zu schreiben.