Получить список всех типов контента

10

Как получить список всех типов контента, определенных на сайте Drupal 8?

В Drupal 7 это было раньше node_type_get_types(), но это устарело.

Я пытался, Entity::loadMultiple()но это не сработало. Я думал о создании пользовательского запроса, но я не знаю, как он хранится в базе данных.

pbonnefoi
источник

Ответы:

21

loadMultiple() должно быть хорошо для этого:

$types = \Drupal::entityTypeManager()
  ->getStorage('node_type')
  ->loadMultiple();
Клайв
источник
16

Вы можете загрузить все объекты NodeType (объекты конфигурации), используя класс 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
источник
2
Трюк с статикой loadMultiple(), load()и create()методы, чтобы называть их по классу типа сущностей , которые вы хотите использовать, то он выясняет тип и использование делает выше динамически. Это немного короче и проще в использовании, но рекомендуется по возможности использовать внедренные сервисы, поэтому в сервисе / контроллере / плагине вы должны внедрить менеджер типов сущностей, а затем использовать его. Позволяет упростить (единичное) тестирование, но результат более или менее одинаков.
Бердир
1

Есть еще одна вспомогательная функция Drupal, которая не устарела с 8.7. node_type_get_names()возвращает:

string [] Массив меток типа узла, основанный на имени типа узла.

API документы

BWagner
источник
Это самое простое решение, если вам нужно заполнить форму выбора (или флажки) вариантов.
TytooF
0

В случае, если node_type_get_names()в будущем произойдет устаревание (также хороший пример array_mapиспользования):

function node_type_get_names() {
  return array_map(function ($bundle_info) {
    return $bundle_info['label'];
  }, \Drupal::service('entity_type.bundle.info')
    ->getBundleInfo('node'));
}
Майк Годин
источник