Obter a lista de todos os tipos de conteúdo

10

Como obtenho uma lista de todos os tipos de conteúdo definidos em um site Drupal 8?

No Drupal 7, costumava ser node_type_get_types(), mas foi preterido.

Eu tentei, Entity::loadMultiple()mas não parece funcionar. Eu estava pensando em fazer uma consulta personalizada, mas não sei como ela é armazenada no banco de dados.

pbonnefoi
fonte

Respostas:

21

loadMultiple() deve estar bem para isso:

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

Você pode carregar todas as entidades NodeType (entidades de configuração) usando a 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
fonte
2
O truque com os métodos static loadMultiple(), load()e create()é chamá-los na classe de tipo de entidade que você deseja usar e, em seguida, ele descobre o tipo e o uso que faz o acima dinamicamente. Isso é um pouco mais curto e fácil de usar, mas é recomendável usar serviços injetados quando possível; portanto, em um serviço / controlador / plug-in, você injeta o gerenciador de tipos de entidade e depois o usa. Permite testes mais fáceis (unitários), mas o resultado é mais ou menos o mesmo.
Berdir 02/05/19
1

Há outra função auxiliar do Drupal que não é preterida a partir de 8.7. node_type_get_names()retorna:

string [] Uma matriz de rótulos de tipo de nó, digitados pelo nome do tipo de nó.

Documentos da API

BWagner
fonte
Essa é a solução mais fácil se você precisar preencher as opções de seleção de formulário (ou caixas de seleção).
TytooF
0

Fornecido caso node_type_get_names()seja preterido no futuro (também um bom exemplo 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
fonte