diff --git a/src/Plugin/DisplayBuilder/StandardDisplayBuilder.php b/src/Plugin/DisplayBuilder/StandardDisplayBuilder.php index 20fbb61..9f3e8c7 100644 --- a/src/Plugin/DisplayBuilder/StandardDisplayBuilder.php +++ b/src/Plugin/DisplayBuilder/StandardDisplayBuilder.php @@ -3,6 +3,7 @@ namespace Drupal\panels\Plugin\DisplayBuilder; use Drupal\Component\Utility\Html; +use Drupal\Core\Block\TitleBlockPluginInterface; use Drupal\Core\Extension\ModuleHandlerInterface; use Drupal\Core\Cache\CacheableMetadata; use Drupal\Core\Plugin\ContainerFactoryPluginInterface; @@ -95,12 +96,14 @@ class StandardDisplayBuilder extends DisplayBuilderBase implements PluginWizardI * The render array representing regions. * @param array $contexts * The array of context objects. + * @param string $title + * The page title. * * @return array * An associative array, keyed by region ID, containing the render arrays * representing the content of each region. */ - protected function buildRegions(array $regions, array $contexts) { + protected function buildRegions(array $regions, array $contexts, $title = NULL) { $build = []; foreach ($regions as $region => $blocks) { if (!$blocks) { @@ -117,6 +120,9 @@ class StandardDisplayBuilder extends DisplayBuilderBase implements PluginWizardI if ($block instanceof ContextAwarePluginInterface) { $this->contextHandler->applyContextMapping($block, $contexts); } + if ($block instanceof TitleBlockPluginInterface) { + $block->setTitle($title); + } if ($block->access($this->account)) { $block_render_array = [ '#theme' => 'block', @@ -172,8 +178,9 @@ class StandardDisplayBuilder extends DisplayBuilderBase implements PluginWizardI $regions = $panels_display->getRegionAssignments(); $contexts = $panels_display->getContexts(); $layout = $panels_display->getLayout(); + $title = $panels_display->getRenderedPageTitle(); - $regions = $this->buildRegions($regions, $contexts); + $regions = $this->buildRegions($regions, $contexts, $title); if ($layout) { $regions = $layout->build($regions); } diff --git a/src/Plugin/DisplayVariant/PanelsDisplayVariant.php b/src/Plugin/DisplayVariant/PanelsDisplayVariant.php index 08b5ffb..0571b3c 100644 --- a/src/Plugin/DisplayVariant/PanelsDisplayVariant.php +++ b/src/Plugin/DisplayVariant/PanelsDisplayVariant.php @@ -300,6 +300,15 @@ class PanelsDisplayVariant extends BlockDisplayVariant implements PluginWizardIn return $this->getLayout()->getPluginDefinition()->getRegionLabels(); } + /** + * This will provide the rendered the page title with tokens replaced. + * + * @return string + */ + public function getRenderedPageTitle() { + return $this->renderPageTitle($this->getPageTitle()); + } + /** * Returns the configured page title. * @@ -327,7 +336,7 @@ class PanelsDisplayVariant extends BlockDisplayVariant implements PluginWizardIn */ public function build() { $build = $this->getBuilder()->build($this); - $build['#title'] = $this->renderPageTitle($this->configuration['page_title']); + $build['#title'] = $this->getRenderedPageTitle(); // Allow other module to alter the built panel. $this->moduleHandler->alter('panels_build', $build, $this); diff --git a/tests/src/Unit/StandardDisplayBuilderTest.php b/tests/src/Unit/StandardDisplayBuilderTest.php index 4f703f1..60e9b3c 100644 --- a/tests/src/Unit/StandardDisplayBuilderTest.php +++ b/tests/src/Unit/StandardDisplayBuilderTest.php @@ -69,6 +69,7 @@ class StandardDisplayBuilderTest extends UnitTestCase { $regions['footer'] = array(); $panels_display = $this->prophesize(PanelsDisplayVariant::class); + $panels_display->getRenderedPageTitle()->willReturn('test'); $panels_display->getRegionAssignments()->willReturn($regions); $panels_display->getContexts()->willReturn([]); $panels_display->getLayout()->willReturn(NULL);