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.

Réponses:


21

loadMultiple() devrait être bien pour cela:

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

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

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


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'));
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.