Изучение Drupal 8: как получить все режимы отображения объекта

В Drupal 8 сущности являются фундаментальным строительным блоком системы управления контентом. Каждая сущность может иметь несколько режимов отображения, которые определяют, как сущность представляется пользователям. В этой статье мы рассмотрим различные методы получения всех режимов отображения объекта, а также примеры кода.

Метод 1: использование диспетчера типов объектов
Диспетчер типов объектов предоставляет удобный способ получения информации об объектах, включая режимы их отображения. Вот пример того, как вы можете использовать Диспетчер типов объектов, чтобы получить все режимы отображения объекта:

use Drupal\Core\Entity\EntityTypeManagerInterface;
function getEntityDisplayModes(EntityTypeManagerInterface $entityTypeManager, $entityType) {
  $displayModes = [];
  $entityTypeDefinition = $entityTypeManager->getDefinition($entityType);

  if ($entityTypeDefinition && $entityTypeDefinition->hasViewBuilderClass()) {
    $viewBuilderClass = $entityTypeDefinition->getViewBuilderClass();
    $viewBuilder = $entityTypeManager->getViewBuilder($entityType);
    $displayModes = $viewBuilder->getConfiguration($entityType);
  }

  return $displayModes;
}
// Usage example
$entityTypeManager = \Drupal::entityTypeManager();
$entityType = 'node'; // Replace with your desired entity type
$displayModes = getEntityDisplayModes($entityTypeManager, $entityType);
// $displayModes will contain an array of all the display modes for the specified entity type

Метод 2: использование диспетчера плагинов режима отображения
Drupal предоставляет диспетчер плагинов режима отображения, который позволяет получать информацию о режимах отображения. Вот пример того, как вы можете использовать диспетчер плагинов режима отображения, чтобы получить все режимы отображения объекта:

use Drupal\Core\Entity\Display\EntityViewDisplayInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
function getEntityDisplayModes(EntityTypeManagerInterface $entityTypeManager, $entityType) {
  $displayModes = [];
  $entityTypeDefinition = $entityTypeManager->getDefinition($entityType);

  if ($entityTypeDefinition && $entityTypeDefinition->hasViewBuilderClass()) {
    $displayModePluginManager = \Drupal::service('plugin.manager.entity_view_display');
    $displayModeDefinitions = $displayModePluginManager->getDefinitions();

    foreach ($displayModeDefinitions as $displayMode => $displayModeDefinition) {
      if ($displayModeDefinition['entity_type'] === $entityType) {
        $displayModes[] = $displayMode;
      }
    }
  }

  return $displayModes;
}
// Usage example
$entityTypeManager = \Drupal::entityTypeManager();
$entityType = 'node'; // Replace with your desired entity type
$displayModes = getEntityDisplayModes($entityTypeManager, $entityType);
// $displayModes will contain an array of all the display modes for the specified entity type

В этой статье мы рассмотрели два метода получения всех режимов отображения объекта в Drupal 8. Используя диспетчер типов объектов или диспетчер плагинов режима отображения, вы можете легко получить режимы отображения для любого типа объекта. Эти методы обеспечивают гибкость и позволяют настраивать отображение сущностей в ваших проектах Drupal.

Не забудьте заменить переменную $entityTypeна желаемый тип сущности в примерах кода.