You are here

public function BlockController::demo in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/block/src/Controller/BlockController.php \Drupal\block\Controller\BlockController::demo()
  2. 10 core/modules/block/src/Controller/BlockController.php \Drupal\block\Controller\BlockController::demo()

Returns a block theme demo page.

Parameters

string $theme: The name of the theme.

Return value

array A #type 'page' render array containing the block region demo.

1 string reference to 'BlockController::demo'
block.routing.yml in core/modules/block/block.routing.yml
core/modules/block/block.routing.yml

File

core/modules/block/src/Controller/BlockController.php, line 69

Class

BlockController
Controller routines for admin block routes.

Namespace

Drupal\block\Controller

Code

public function demo($theme) {
  if (!$this->themeHandler
    ->hasUi($theme)) {
    throw new NotFoundHttpException();
  }
  $page = [
    '#title' => Html::escape($this->themeHandler
      ->getName($theme)),
    '#type' => 'page',
    '#attached' => [
      'drupalSettings' => [
        // The block demonstration page is not marked as an administrative
        // page by \Drupal::service('router.admin_context')->isAdminRoute()
        // function in order to use the frontend theme. Since JavaScript
        // relies on a proper separation of admin pages, it needs to know this
        // is an actual administrative page.
        'path' => [
          'currentPathIsAdmin' => TRUE,
        ],
      ],
      'library' => [
        'block/drupal.block.admin',
      ],
    ],
  ];

  // Show descriptions in each visible page region, nothing else.
  $visible_regions = $this
    ->getVisibleRegionNames($theme);
  foreach (array_keys($visible_regions) as $region) {
    $page[$region]['block_description'] = [
      '#type' => 'inline_template',
      '#template' => '<div class="block-region demo-block">{{ region_name }}</div>',
      '#context' => [
        'region_name' => $visible_regions[$region],
      ],
    ];
  }
  return $page;
}