Obtenez la liste de tous les types de contenu

10

Comment obtenir une liste de tous les types de contenu définis dans un site Drupal 8?

Dans Drupal 7, c'était le cas auparavant node_type_get_types(), mais il est obsolète.

J'ai essayé Entity::loadMultiple()mais ça ne semble pas marcher. Je pensais faire une requête personnalisée, mais je ne sais pas comment elle est stockée dans la base de données.

pbonnefoi
la source

Réponses:

21

loadMultiple() devrait être bien pour cela:

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

Vous pouvez charger toutes les entités NodeType (entités de configuration) à l'aide de la classe NodeType:

$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
la source
2
L'astuce avec les méthodes static loadMultiple(), load()et create()est de les appeler sur la classe de type d'entité que vous souhaitez utiliser, puis il détermine le type et utilise dynamiquement ce qui précède. C'est un peu plus court et plus facile à utiliser, mais il est recommandé d'utiliser des services injectés lorsque cela est possible, donc dans un service / contrôleur / plug-in, vous injecteriez le gestionnaire de type d'entité, puis l'utiliser. Permet des tests (unitaires) plus faciles mais le résultat est plus ou moins le même.
Berdir
1

Il existe une autre fonction d'aide Drupal qui n'est pas obsolète à partir de la version 8.7. node_type_get_names()Retour:

string [] Un tableau d'étiquettes de type de nœud, saisi par le nom du type de nœud.

Documents API

BWagner
la source
C'est la solution la plus simple si vous devez remplir les options de sélection (ou de cases à cocher) du formulaire.
TytooF
0

À condition que le cas node_type_get_names()devienne obsolète à l'avenir (également un bel exemple d' array_maputilisation):

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
la source