Obtenga la lista de todos los tipos de contenido

10

¿Cómo obtengo una lista de todos los tipos de contenido definidos en un sitio de Drupal 8?

En Drupal 7 solía ser node_type_get_types(), pero ha quedado en desuso.

Lo intenté Entity::loadMultiple()pero no parece funcionar. Estaba pensando en hacer una consulta personalizada, pero no sé cómo se almacena en la base de datos.

pbonnefoi
fuente

Respuestas:

21

loadMultiple() debería estar bien para esto:

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

Puede cargar todas las entidades NodeType (entidades de configuración) utilizando la clase 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
fuente
2
El truco con los métodos estático loadMultiple(), load()y create()es llamarlos en la clase de tipo de entidad que desea usar, luego descubre el tipo y usa lo que hace dinámicamente. Esto es un poco más corto y fácil de usar, pero se recomienda usar servicios inyectados cuando sea posible, por lo que en un servicio / controlador / complemento, inyectaría el administrador de tipo de entidad y luego lo usaría. Permite una prueba (unidad) más fácil pero el resultado es más o menos el mismo.
Berdir
1

Hay otra función auxiliar de Drupal que no está en desuso a partir de 8.7. node_type_get_names()devoluciones:

string [] Una matriz de etiquetas de tipo de nodo, codificadas por el nombre del tipo de nodo.

Documentos API

BWagner
fuente
Esta es la solución más fácil si necesita completar el formulario de selección (o casillas de verificación) opciones.
TytooF
0

Proporcionado en caso de que node_type_get_names()quede obsoleto en el futuro (también es un buen ejemplo de array_mapuso):

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
fuente