diff --git a/src/PanelizerEntityViewBuilder.php b/src/PanelizerEntityViewBuilder.php index c72f796..55e41bc 100644 --- a/src/PanelizerEntityViewBuilder.php +++ b/src/PanelizerEntityViewBuilder.php @@ -9,7 +9,6 @@ namespace Drupal\panelizer; use Drupal\Core\Cache\CacheableMetadata; use Drupal\Core\Entity\Display\EntityViewDisplayInterface; -use Drupal\Core\Entity\Entity\EntityViewDisplay; use Drupal\Core\Entity\EntityHandlerInterface; use Drupal\Core\Entity\EntityInterface; use Drupal\Core\Entity\EntityTypeInterface; @@ -20,7 +19,6 @@ use Drupal\Core\Field\FieldItemInterface; use Drupal\Core\Field\FieldItemListInterface; use Drupal\Core\Plugin\Context\Context; use Drupal\Core\Plugin\Context\ContextDefinition; -use Drupal\panelizer\Entity\Display\PanelizerEntityViewDisplay; use Drupal\panelizer\Plugin\PanelizerEntityManagerInterface; use Drupal\Panels\PanelsDisplayManagerInterface; use Drupal\panels\Plugin\DisplayVariant\PanelsDisplayVariant; @@ -335,7 +333,8 @@ class PanelizerEntityViewBuilder implements EntityViewBuilderInterface, EntityHa "{$this->entityTypeId}_view", 'entity_view', ); - $this->moduleHandler->alter($alter_types, $build[$id], $entity, $this->panelizer->getRenderDisplay($entity, $view_mode)); + $display = $this->panelizer->getRenderDisplay($entity, $view_mode); + $this->moduleHandler->alter($alter_types, $build[$id], $entity, $display); } return $build; diff --git a/src/PanelizerEntityViewDisplay.php b/src/PanelizerEntityViewDisplay.php index 1fdadae..b37d5e2 100644 --- a/src/PanelizerEntityViewDisplay.php +++ b/src/PanelizerEntityViewDisplay.php @@ -68,7 +68,11 @@ class PanelizerEntityViewDisplay extends EntityViewDisplay implements PanelizerE * {@inheritdoc} */ public function hasDisplay($id = NULL) { - return (bool) $this->getDisplay($id); + $displays = $this->getDisplays(); + if ($id) { + return !empty($displays[$id]); + } + return !empty($displays); } /** @@ -82,7 +86,7 @@ class PanelizerEntityViewDisplay extends EntityViewDisplay implements PanelizerE * {@inheritdoc} */ public function getDisplay($id = NULL) { - if (empty($id)) { + if (empty($id) || !$this->hasDisplay($id)) { $id = $this->getDefault(); } return $this->getDisplays()[$id]; diff --git a/tests/src/Unit/PanelizerEntityViewBuilderTest.php b/tests/src/Unit/PanelizerEntityViewBuilderTest.php index 26954c8..13184c9 100644 --- a/tests/src/Unit/PanelizerEntityViewBuilderTest.php +++ b/tests/src/Unit/PanelizerEntityViewBuilderTest.php @@ -18,6 +18,7 @@ use Drupal\Core\Field\FieldItemInterface; use Drupal\Core\Field\FieldItemListInterface; use Drupal\Core\Plugin\Context\ContextInterface; use Drupal\panelizer\PanelizerEntityViewBuilder; +use Drupal\panelizer\PanelizerEntityViewDisplayInterface; use Drupal\panelizer\PanelizerInterface; use Drupal\panelizer\Plugin\PanelizerEntityInterface; use Drupal\panelizer\Plugin\PanelizerEntityManagerInterface; @@ -201,24 +202,19 @@ class PanelizerEntityViewBuilderTest extends UnitTestCase { $entity1->getCacheTags()->willReturn(['tag']); $entity1->getCacheMaxAge()->willReturn(123); - $display1 = $this->prophesize(EntityViewDisplayInterface::class); - $display1->getThirdPartySetting('panelizer', 'enable', FALSE) - ->willReturn(TRUE); + $display1 = $this->prophesize(PanelizerEntityViewDisplayInterface::class); + $display1->isPanelized()->willReturn(TRUE); + $this->panelizer->getRenderDisplay($entity1->reveal(), 'full') + ->willReturn($display1->reveal()); $entity2 = $this->prophesize(FieldableEntityInterface::class); $entity2->bundle()->willReturn('xyz'); $entity2->getEntityTypeId()->willReturn('entity_type_id'); - $display2 = $this->prophesize(EntityViewDisplayInterface::class); - $display2->getThirdPartySetting('panelizer', 'enable', FALSE) - ->willReturn(FALSE); - - $this->entityViewBuilder - ->method('collectRenderDisplays') - ->willReturn([ - 'abc' => $display1->reveal(), - 'xyz' => $display2->reveal() - ]); + $display2 = $this->prophesize(PanelizerEntityViewDisplayInterface::class); + $display2->isPanelized()->willReturn(FALSE); + $this->panelizer->getRenderDisplay($entity2->reveal(), 'full') + ->willReturn($display2->reveal()); $entity_context = $this->prophesize(ContextInterface::class); $this->entityViewBuilder->method('getEntityContext') @@ -247,7 +243,10 @@ class PanelizerEntityViewBuilderTest extends UnitTestCase { '@panelizer.entity_context:entity' => $entity_context->reveal(), ]); - $this->panelizer->getPanelsDisplay($entity1->reveal(), 'full', $display1->reveal()) + $this->panelizer->getPanelsDisplay($entity1->reveal(), 'full') + ->willReturn($panels_display->reveal()); + + $this->panelizer->getPanelsDisplay($entity2->reveal(), 'full') ->willReturn($panels_display->reveal()); $panels_display->getCacheContexts()->willReturn([]);