stacks-8.x-1.x-dev/src/TwigExtension/ViewMode.php
src/TwigExtension/ViewMode.php
<?php
namespace Drupal\stacks\TwigExtension;
use Drupal;
use Twig\Extension\AbstractExtension;
use Twig\TwigFilter;
/**
* Class ViewMode.
* @package Drupal\stacks\TwigExtension
*/
class ViewMode extends AbstractExtension {
/**
* Generates a list of all Twig filters that this extension defines.
*/
public function getFilters() {
return [
new TwigFilter('view_mode', [$this, 'viewMode']),
new TwigFilter('view_mode_object', [$this, 'viewModeNode']),
];
}
/**
* Gets a unique identifier for this Twig extension.
*/
public function getName() {
return 'stacks_viewmode.twig_extension';
}
public static function viewModeNode($entity, $view_mode) {
if (!is_object($entity) || !method_exists($entity, 'getEntityTypeId')) {
return;
}
$view_builder = \Drupal::entityTypeManager()
->getViewBuilder($entity->getEntityTypeId());
$render_array = $view_builder->view($entity, $view_mode);
return Drupal::service('renderer')->render($render_array);
}
/**
* Takes a view mode (string), and an entity object. Returns rendered html.
*/
public static function viewMode($entity_options, $view_mode) {
if (!isset($entity_options['entity_type'])) {
// This is not an entity object.
return '';
}
$entity = Drupal::entityTypeManager()
->getStorage($entity_options['entity_type'])
->load($entity_options['entity_id']);
$view_builder = Drupal::entityTypeManager()
->getViewBuilder($entity_options['entity_type']);
$render_array = $view_builder->view($entity, $view_mode);
return Drupal::service('renderer')->render($render_array);
}
}
