it-swarm.com.de

Holen Sie sich die Liste aller Inhaltstypen

Wie erhalte ich eine Liste aller Inhaltstypen, die auf einer Drupal 8-Site) definiert sind?

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

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

10
pbonnefoi

loadMultiple() sollte dafür in Ordnung sein:

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

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();
}
16
googletorp

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

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

API-Dokumente

1
BWagner

Vorausgesetzt, dass node_type_get_names() in Zukunft veraltet ist (auch ein schönes Beispiel für array_map Verwendungszweck):

function node_type_get_names() {
  return array_map(function ($bundle_info) {
    return $bundle_info['label'];
  }, \Drupal::service('entity_type.bundle.info')
    ->getBundleInfo('node'));
}
0
Mike Godin