function BlockViewBuilder::buildPreRenderableBlock

Same name in other branches
  1. 9 core/modules/block/src/BlockViewBuilder.php \Drupal\block\BlockViewBuilder::buildPreRenderableBlock()
  2. 8.9.x core/modules/block/src/BlockViewBuilder.php \Drupal\block\BlockViewBuilder::buildPreRenderableBlock()
  3. 11.x core/modules/block/src/BlockViewBuilder.php \Drupal\block\BlockViewBuilder::buildPreRenderableBlock()

Builds a #pre_render-able block render array.

Parameters

\Drupal\block\BlockInterface $entity: A block config entity.

\Drupal\Core\Extension\ModuleHandlerInterface $module_handler: The module handler service.

Return value

array A render array with a #pre_render callback to render the block.

2 calls to BlockViewBuilder::buildPreRenderableBlock()
BlockViewBuilder::lazyBuilder in core/modules/block/src/BlockViewBuilder.php
#lazy_builder callback; builds a #pre_render-able block.
BlockViewBuilder::viewMultiple in core/modules/block/src/BlockViewBuilder.php
Builds the render array for the provided entities.

File

core/modules/block/src/BlockViewBuilder.php, line 95

Class

BlockViewBuilder
Provides a Block view builder.

Namespace

Drupal\block

Code

protected static function buildPreRenderableBlock(BlockInterface $entity, ModuleHandlerInterface $module_handler) {
    $plugin = $entity->getPlugin();
    $plugin_id = $plugin->getPluginId();
    $base_id = $plugin->getBaseId();
    $derivative_id = $plugin->getDerivativeId();
    $configuration = $plugin->getConfiguration();
    // Inject runtime contexts.
    if ($plugin instanceof ContextAwarePluginInterface) {
        $contexts = \Drupal::service('context.repository')->getRuntimeContexts($plugin->getContextMapping());
        \Drupal::service('context.handler')->applyContextMapping($plugin, $contexts);
    }
    // Create the render array for the block as a whole.
    // @see template_preprocess_block().
    $build = [
        '#theme' => 'block',
        '#attributes' => [],
        // All blocks get a "Configure block" contextual link.
'#contextual_links' => [
            'block' => [
                'route_parameters' => [
                    'block' => $entity->id(),
                ],
            ],
        ],
        '#weight' => $entity->getWeight(),
        '#configuration' => $configuration,
        '#plugin_id' => $plugin_id,
        '#base_plugin_id' => $base_id,
        '#derivative_plugin_id' => $derivative_id,
        '#id' => $entity->id(),
        '#pre_render' => [
            static::class . '::preRender',
        ],
        // Add the entity so that it can be used in the #pre_render method.
'#block' => $entity,
    ];
    // If an alter hook wants to modify the block contents, it can append
    // another #pre_render hook.
    $module_handler->alter([
        'block_view',
        "block_view_{$base_id}",
    ], $build, $plugin);
    return $build;
}

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