Ein einzelnes Feld einer Entität anzeigen

Geschrieben von patrick am Mo., 03.04.2017 - 13:08 Uhr

Mitunter möchten Sie anstatt der vollständigen Entität nur das renderable array eines einzigen Feldes einer Entität anzeigen. Im folgenden Beispiel rufen wir das renderable array für zwei Felder einer Entität ab, body und field_example:

use Drupal\node\Entity\Node;
 
$render = [];
$entity_type_manager = \Drupal::entityTypeManager();
$entity = $entity_type_manager->getStorage($entity_type)->load($entity_id);
$fields = [
  'body',
  'field_example'
];
if ($entity) {
  $display = $entity_type_manager->getStorage('entity_view_display')->load($entity_type . '.' . $entity->bundle() . '.' . $view_mode);
  $view_builder = NULL;
  foreach ($fields as $field_name) {
    if (isset($entity->{$field_name})) {
      $component = $display->getComponent($field_name);
      if ($component) {
        if ($view_builder === NULL) {
          $view_builder = $entity_type_manager->getViewBuilder($entity_type);
        }
        $render[$field_name] = $view_builder->viewField($entity->{$field_name}, $display->getComponent($field_name));
      }
    }
  }
}

Als erstes laden wir das Entitätsobjekt und erstellen ein array mit den maschinen-lesbaren Namen der Felder, die wir anzeigen wollen. Dann laden wir das entity view display für einen view mode der Entität, der die Anzeigeeinstellungen für die Felder, die wir anzeigen wollen, enthält. Außerdem benötigen wir den view builder für den Entitätstyp. Dann rufen wir mittels der Methode getComponent() die display settings für jedes Feld aus dem Display ab und geben es zusammen mit dem tatsächlichen Feldinhalt an die Methode viewField() des view builders weiter. Die gibt dann das renderable array für das Feld zurück, das wir in einem Template ausgeben oder mittels des Renderer service anzeigen können.

Wenn Sie keinen passenden view mode zur Hand haben, können Sie die Anzeigeeinstellungen auch selbst erstellen und übergeben. Dabei handelt es sich im wesentlichen um Informationen, wie die Feldbezeichnung angezeigt werden soll (oder nicht), the Id des field formatters, der verwendet werden soll und den Einstellungen, die dieser evt. benötigt. Schauen Sie sich die Dokumentation der Methode viewField() an, die oben verlinkt ist, falls Sie das ausprobieren möchten.

Update: Wenn nur gelegentlich ein einzelnes, bereits vorliegendes Feld gerendert werden soll, kann auch die Methode Drupal\Core\Field\FieldItemList::view des Feldes selbst verwendet werden. z.B:

$build = $entity->field_example->view('teaser');

Anstelle des View Modes kann hier ebenso ein Array mit Anzeige-Optionen übergeben werden.

Systeme
Drupal 8/9