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.

pbonnefoi
quelle

Antworten:

21

loadMultiple() sollte dafür in Ordnung sein:

$types = \Drupal::entityTypeManager()
  ->getStorage('node_type')
  ->loadMultiple();
Clive
quelle
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();
}
googletorp
quelle
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

BWagner
quelle
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'));
}
Mike Godin
quelle