Holen Sie sich die Liste aller Inhaltstypen


10

Wie erhalte ich eine Liste aller auf einer Drupal 8-Site definierten Inhaltstypen?

In Drupal 7 war es früher node_type_get_types(), aber es wurde veraltet.

Ich habe es versucht, Entity::loadMultiple()aber es scheint nicht zu funktionieren. Ich habe über eine benutzerdefinierte Abfrage nachgedacht, weiß aber nicht, wie sie in der Datenbank gespeichert ist.

Antworten:


21

loadMultiple() sollte dafür in Ordnung sein:

$types = \Drupal::entityTypeManager()
  ->getStorage('node_type')
  ->loadMultiple();

16

Sie können alle NodeType-Entitäten (Konfigurationsentitäten) mit der NodeType-Klasse laden:

$node_types = \Drupal\node\Entity\NodeType::loadMultiple();
// If you need to display them in a drop down:
$options = [];
foreach ($node_types as $node_type) {
  $options[$node_type->id()] = $node_type->label();
}

2
Der Trick mit dem statischen loadMultiple(), load()und create()Methoden ist sie auf dem Entitätstyp Klasse aufrufen , die Sie verwenden möchten, dann rechnet sie die Art und Anwendungen funktioniert die oben dynamisch. Dies ist etwas kürzer und einfacher zu verwenden, es wird jedoch empfohlen, wenn möglich injizierte Dienste zu verwenden. In einem Dienst / Controller / Plugin würden Sie also den Entitätstyp-Manager injizieren und diesen dann verwenden. Ermöglicht einfachere (Einheits-) Tests, aber das Ergebnis ist mehr oder weniger das gleiche.
Berdir

1

Es gibt eine weitere Drupal-Hilfsfunktion, die ab 8.7 nicht mehr veraltet ist. node_type_get_names()kehrt zurück:

string [] Ein Array von Knotentypbezeichnungen, die durch den Knotentypnamen gekennzeichnet sind.

API-Dokumente


Dies ist die einfachste Lösung, wenn Sie Formularauswahloptionen (oder Kontrollkästchen) ausfüllen müssen.
TytooF

0

Vorausgesetzt, falls es node_type_get_names()in Zukunft veraltet sein sollte (auch ein schönes array_mapAnwendungsbeispiel):

function node_type_get_names() {
  return array_map(function ($bundle_info) {
    return $bundle_info['label'];
  }, \Drupal::service('entity_type.bundle.info')
    ->getBundleInfo('node'));
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.