Отримайте список усіх типів вмісту


10

Як отримати список усіх типів вмісту, визначених на сайті Drupal 8?

У Drupal 7 це було раніше node_type_get_types(), але воно застаріле.

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

Відповіді:


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

2
Трюк зі статичними loadMultiple(), load()та create()методами полягає в тому, щоб викликати їх у класі типу сутності, який ви хочете використовувати, тоді він визначає тип і використовує, як описано вище, динамічно. Це трохи коротше і простіше у використанні, але рекомендується використовувати ін'єкційні служби, коли це можливо, тому в сервісі / контролері / плагіні ви повинні ввести диспетчер типів сутності та потім використовувати його. Дозволяє легше (одиничне) тестування, але результат більш-менш однаковий.
Бердір

1

Є ще одна помічна функція Drupal, яка не застаріла з 8.7. node_type_get_names()повертає:

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

Документи API


Це найпростіше рішення, якщо вам потрібно заповнити параметри вибору (або прапорців).
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'));
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.