Ottieni l'elenco di tutti i tipi di contenuto


10

Come posso ottenere un elenco di tutti i tipi di contenuto definiti in un sito Drupal 8?

In Drupal 7 lo era node_type_get_types(), ma è stato deprecato.

Ci ho provato Entity::loadMultiple()ma non sembra funzionare. Stavo pensando di creare una query personalizzata, ma non so come sia archiviata nel database.

Risposte:


21

loadMultiple() dovrebbe andare bene per questo:

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

16

Puoi caricare tutte le entità NodeType (entità di configurazione) usando 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
Il trucco con i metodi statico loadMultiple(), load()e create()è quello di chiamarli sulla classe del tipo di entità che si desidera utilizzare, quindi capisce il tipo e usa fa dinamicamente quanto sopra. Questo è un po 'più breve e più facile da usare, ma è consigliabile utilizzare i servizi iniettati quando possibile, quindi in un servizio / controller / plug-in, si dovrebbe iniettare il gestore del tipo di entità e quindi usarlo. Consente test più semplici (unità) ma il risultato è più o meno lo stesso.
Berdir,

1

Esiste un'altra funzione di supporto Drupal che non è obsoleta a partire da 8.7. node_type_get_names()ritorna:

string [] Un array di etichette di tipo nodo, codificate dal nome del tipo di nodo.

Documenti API


Questa è la soluzione più semplice se devi compilare le opzioni di selezione del modulo (o caselle di controllo).
TytooF

0

Fornito nel caso in cui node_type_get_names()venga deprecato in futuro (anche un bell'esempio di array_maputilizzo):

function node_type_get_names() {
  return array_map(function ($bundle_info) {
    return $bundle_info['label'];
  }, \Drupal::service('entity_type.bundle.info')
    ->getBundleInfo('node'));
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.