function ChooseBlockController::build

Same name and namespace in other branches
  1. 9 core/modules/layout_builder/src/Controller/ChooseBlockController.php \Drupal\layout_builder\Controller\ChooseBlockController::build()
  2. 8.9.x core/modules/layout_builder/src/Controller/ChooseBlockController.php \Drupal\layout_builder\Controller\ChooseBlockController::build()
  3. 11.x core/modules/layout_builder/src/Controller/ChooseBlockController.php \Drupal\layout_builder\Controller\ChooseBlockController::build()

Provides the UI for choosing a new block.

Parameters

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

int $delta: The delta of the section to splice.

string $region: The region the block is going in.

Return value

array A render array.

1 string reference to 'ChooseBlockController::build'
layout_builder.routing.yml in core/modules/layout_builder/layout_builder.routing.yml
core/modules/layout_builder/layout_builder.routing.yml

File

core/modules/layout_builder/src/Controller/ChooseBlockController.php, line 91

Class

ChooseBlockController
Defines a controller to choose a new block.

Namespace

Drupal\layout_builder\Controller

Code

public function build(SectionStorageInterface $section_storage, int $delta, $region) {
    if ($this->entityTypeManager
        ->hasDefinition('block_content_type') && ($types = $this->entityTypeManager
        ->getStorage('block_content_type')
        ->loadMultiple())) {
        if (count($types) === 1) {
            $type = reset($types);
            $plugin_id = 'inline_block:' . $type->id();
            if ($this->blockManager
                ->hasDefinition($plugin_id)) {
                $url = Url::fromRoute('layout_builder.add_block', [
                    'section_storage_type' => $section_storage->getStorageType(),
                    'section_storage' => $section_storage->getStorageId(),
                    'delta' => $delta,
                    'region' => $region,
                    'plugin_id' => $plugin_id,
                ]);
            }
        }
        else {
            $url = Url::fromRoute('layout_builder.choose_inline_block', [
                'section_storage_type' => $section_storage->getStorageType(),
                'section_storage' => $section_storage->getStorageId(),
                'delta' => $delta,
                'region' => $region,
            ]);
        }
        if (isset($url)) {
            $build['add_block'] = [
                '#type' => 'link',
                '#url' => $url,
                '#title' => $this->t('Create @entity_type', [
                    '@entity_type' => $this->entityTypeManager
                        ->getDefinition('block_content')
                        ->getSingularLabel(),
                ]),
                '#attributes' => $this->getAjaxAttributes(),
                '#access' => $this->currentUser
                    ->hasPermission('create and edit custom blocks'),
            ];
            $build['add_block']['#attributes']['class'][] = 'inline-block-create-button';
        }
    }
    $build['filter'] = [
        '#type' => 'search',
        '#title' => $this->t('Filter by block name'),
        '#title_display' => 'invisible',
        '#size' => 30,
        '#placeholder' => $this->t('Filter by block name'),
        '#attributes' => [
            'class' => [
                'js-layout-builder-filter',
            ],
            'title' => $this->t('Enter a part of the block name to filter by.'),
        ],
    ];
    $block_categories['#type'] = 'container';
    $block_categories['#attributes']['class'][] = 'block-categories';
    $block_categories['#attributes']['class'][] = 'js-layout-builder-categories';
    $block_categories['#attributes']['data-layout-builder-target-highlight-id'] = $this->blockAddHighlightId($delta, $region);
    $definitions = $this->blockManager
        ->getFilteredDefinitions('layout_builder', $this->getPopulatedContexts($section_storage), [
        'section_storage' => $section_storage,
        'delta' => $delta,
        'region' => $region,
    ]);
    $grouped_definitions = $this->blockManager
        ->getGroupedDefinitions($definitions);
    foreach ($grouped_definitions as $category => $blocks) {
        $block_categories[$category]['#type'] = 'details';
        $block_categories[$category]['#attributes']['class'][] = 'js-layout-builder-category';
        $block_categories[$category]['#open'] = TRUE;
        $block_categories[$category]['#title'] = $category;
        $block_categories[$category]['links'] = $this->getBlockLinks($section_storage, $delta, $region, $blocks);
    }
    $build['block_categories'] = $block_categories;
    return $build;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.