diff --git a/core/lib/Drupal/Core/Entity/Controller/EntityViewController.php b/core/lib/Drupal/Core/Entity/Controller/EntityViewController.php index 98999fc018..06c5cce5c5 100644 --- a/core/lib/Drupal/Core/Entity/Controller/EntityViewController.php +++ b/core/lib/Drupal/Core/Entity/Controller/EntityViewController.php @@ -3,6 +3,7 @@ namespace Drupal\Core\Entity\Controller; use Drupal\Core\DependencyInjection\ContainerInjectionInterface; +use Drupal\Core\Entity\Entity\EntityViewDisplay; use Drupal\Core\Entity\EntityInterface; use Drupal\Core\Entity\FieldableEntityInterface; use Drupal\Core\Entity\EntityManagerInterface; @@ -73,16 +74,25 @@ public static function create(ContainerInterface $container) { * The changed page render array. */ public function buildTitle(array $page) { - $entity_type = $page['#entity_type']; - $entity = $page['#' . $entity_type]; + $entity_output = $page['entity']; + $entity_type = $entity_output['#entity_type']; + $entity = $entity_output['#' . $entity_type]; + // If the entity's label is rendered using a field formatter, set the // rendered title field formatter as the page title instead of the default // plain text title. This allows attributes set on the field to propagate // correctly (e.g. RDFa, in-place editing). if ($entity instanceof FieldableEntityInterface) { $label_field = $entity->getEntityType()->getKey('label'); - if (isset($page[$label_field])) { - $page['#title'] = $this->renderer->render($page[$label_field]); + $view_mode = isset($entity_output['#view_mode']) ? $entity_output['#view_mode'] : 'full'; + $displays = EntityViewDisplay::collectRenderDisplays([$entity], $view_mode); + $builds = [$entity_output]; + $this->entityManager + ->getViewBuilder($entity->getEntityTypeId()) + ->buildComponents($builds, [$entity], $displays, $view_mode); + $entity_build = reset($builds); + if (isset($entity_build[$label_field])) { + $page['#title'] = $this->renderer->render($entity_build[$label_field]); } } return $page; @@ -107,7 +117,7 @@ public function view(EntityInterface $_entity, $view_mode = 'full') { ->getViewBuilder($_entity->getEntityTypeId()) ->view($_entity, $view_mode); - $page['entity']['#pre_render'][] = [$this, 'buildTitle']; + $page['#pre_render'][] = [$this, 'buildTitle']; $page['entity']['#entity_type'] = $_entity->getEntityTypeId(); $page['entity']['#' . $page['entity']['#entity_type']] = $_entity;