PreviewController.php in View Modes Display 8.2
File
src/Controller/PreviewController.php
View source
<?php
namespace Drupal\view_modes_display\Controller;
use Drupal\Core\Controller\ControllerBase;
use Drupal\Core\Entity\ContentEntityInterface;
use Drupal\Core\Entity\EntityDisplayRepositoryInterface;
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\media\MediaInterface;
use Drupal\node\NodeInterface;
use Drupal\block_content\BlockContentInterface;
use Drupal\user\UserInterface;
use Drupal\view_modes_display\Service\PreviewFactory;
use Symfony\Component\DependencyInjection\ContainerInterface;
class PreviewController extends ControllerBase {
protected $previewFactory;
protected $entityDisplayRepository;
public function __construct(PreviewFactory $previewFactory, EntityDisplayRepositoryInterface $entityDisplayRepository) {
$this->previewFactory = $previewFactory;
$this->entityDisplayRepository = $entityDisplayRepository;
}
public static function create(ContainerInterface $container) {
return new static($container
->get('view_modes_display.preview_factory'), $container
->get('entity_display.repository'));
}
public function previewEntity(RouteMatchInterface $route_match, $entity_type) {
$entity = $route_match
->getParameter($entity_type);
$view_mode = $route_match
->getParameter('view_mode');
$view_modes = $this->entityDisplayRepository
->getViewModes($entity
->getEntityTypeId());
$renderArray = [];
if ($view_mode == 'all') {
$renderArray = $this->previewFactory
->preview($entity);
}
else {
$markup = $this->previewFactory
->buildMarkup($entity, $view_mode);
$renderArray[] = [
'#prefix' => '<div class="view-mode-list-item view-mode-list-item-' . $view_mode . '"><div class="view-mode-list-item-label">' . $view_modes[$view_mode]['label'] . '</div><div class="view-mode-list-item-content">',
'#markup' => render($markup),
'#suffix' => '</div></div>',
];
}
return $renderArray;
}
public function previewList(RouteMatchInterface $route_match, $entity_type) {
$content = [];
$links = [];
$view_modes = $this->entityDisplayRepository
->getViewModes($entity_type);
$entity = $route_match
->getParameter($entity_type);
$entityDisplays = $this->previewFactory
->getEntityDisplays($entity_type, $entity
->bundle());
foreach ($this->previewFactory
->getEnabledDisplayModes($entityDisplays) as $display) {
$label = ucfirst($display);
if (isset($view_modes[$display]['label'])) {
$label = $view_modes[$display]['label'];
}
$url = $entity
->toUrl('vmd-preview-list');
$url = $url
->setRouteParameter('view_mode', $display);
$links[] = [
'#type' => 'link',
'#url' => $url,
'#title' => t('Preview %label', [
'%label' => $label,
]),
];
}
$content['preview_links'] = [
'#theme' => 'item_list',
'#items' => $links,
'#title' => t('Available ViewMode Previews:'),
];
return $content;
}
}