You are here

protected function LayoutBuilder::layout in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/layout_builder/src/Element/LayoutBuilder.php \Drupal\layout_builder\Element\LayoutBuilder::layout()

Renders the Layout UI.

Parameters

\Drupal\layout_builder\SectionStorageInterface $section_storage: The section storage.

Return value

array A render array.

1 call to LayoutBuilder::layout()
LayoutBuilder::preRender in core/modules/layout_builder/src/Element/LayoutBuilder.php
Pre-render callback: Renders the Layout Builder UI.

File

core/modules/layout_builder/src/Element/LayoutBuilder.php, line 112

Class

LayoutBuilder
Defines a render element for building the Layout Builder UI.

Namespace

Drupal\layout_builder\Element

Code

protected function layout(SectionStorageInterface $section_storage) {
  $this
    ->prepareLayout($section_storage);
  $output = [];
  if ($this
    ->isAjax()) {
    $output['status_messages'] = [
      '#type' => 'status_messages',
    ];
  }
  $count = 0;
  for ($i = 0; $i < $section_storage
    ->count(); $i++) {
    $output[] = $this
      ->buildAddSectionLink($section_storage, $count);
    $output[] = $this
      ->buildAdministrativeSection($section_storage, $count);
    $count++;
  }
  $output[] = $this
    ->buildAddSectionLink($section_storage, $count);
  $output['#attached']['library'][] = 'layout_builder/drupal.layout_builder';

  // As the Layout Builder UI is typically displayed using the frontend theme,
  // it is not marked as an administrative page at the route level even though
  // it performs an administrative task. Mark this as an administrative page
  // for JavaScript.
  $output['#attached']['drupalSettings']['path']['currentPathIsAdmin'] = TRUE;
  $output['#type'] = 'container';
  $output['#attributes']['id'] = 'layout-builder';
  $output['#attributes']['class'][] = 'layout-builder';

  // Mark this UI as uncacheable.
  $output['#cache']['max-age'] = 0;
  return $output;
}