You are here

public function DefaultController::preview in View Modes Display 8

Preview entity view modes.

Return value

string Preview content of entity view modes.

3 calls to DefaultController::preview()
DefaultController::previewBlockContent in src/Controller/DefaultController.php
Returns content of the block.
DefaultController::previewNode in src/Controller/DefaultController.php
Returns content of the node.
DefaultController::previewUser in src/Controller/DefaultController.php
Returns user.

File

src/Controller/DefaultController.php, line 63

Class

DefaultController
Class DefaultController.

Namespace

Drupal\view_modes_display\Controller

Code

public function preview(ContentEntityInterface $entity) {
  $entity_manager = $this
    ->entityManager();
  $entity_type = $entity
    ->getEntityType()
    ->get('id');
  $view_modes_info = $entity_manager
    ->getViewModes($entity_type);
  $config_prefix = 'core.entity_view_display';
  $entity_type_id = $entity
    ->getEntityType()
    ->id();
  $ids = $this
    ->configFactory()
    ->listAll($config_prefix . '.' . $entity_type_id . '.' . $entity
    ->bundle() . '.');
  $load_ids = [];
  foreach ($ids as $id) {
    $config_id = str_replace($config_prefix . '.', '', $id);
    list(, , $display_mode) = explode('.', $config_id);
    $load_ids[] = $config_id;
  }
  $enabled_display_modes = [];
  $displays = $entity_manager
    ->getStorage('entity_view_display')
    ->loadMultiple($load_ids);
  foreach ($displays as $display) {
    if ($display
      ->status()) {
      $enabled_display_modes[] = $display
        ->get('mode');
    }
  }
  if (!array_key_exists('full', $view_modes_info)) {
    $view_modes_info['full'] = [
      'label' => t('Default'),
    ];
  }
  if (!array_key_exists('full', $enabled_display_modes)) {
    $enabled_display_modes[] = 'full';
  }
  $view_builder = \Drupal::entityTypeManager()
    ->getViewBuilder($entity
    ->getEntityTypeId());

  // Loop through the view modes and render in-place.
  $build = [];
  foreach ($view_modes_info as $view_mode_name => $view_mode_info) {
    if (in_array($view_mode_name, $enabled_display_modes)) {
      $build[] = [
        '#prefix' => '<div class="view-mode-list-item view-mode-list-item-' . $view_mode_name . '"><h1>' . $view_mode_info['label'] . '</h1>',
        '#markup' => render($view_builder
          ->view($entity, $view_mode_name)),
        '#suffix' => '</div>',
      ];
    }
  }
  return $build;
}