You are here

public function BootstrapLayout::build in Bootstrap Layout Builder 2.x

Same name and namespace in other branches
  1. 1.x src/Plugin/Layout/BootstrapLayout.php \Drupal\bootstrap_layout_builder\Plugin\Layout\BootstrapLayout::build()

Build a render array for layout with regions.

Parameters

array $regions: An associative array keyed by region name, containing render arrays representing the content that should be placed in each region.

Return value

array Render array for the layout with regions.

Overrides LayoutDefault::build

File

src/Plugin/Layout/BootstrapLayout.php, line 93

Class

BootstrapLayout
A layout from our bootstrap layout builder.

Namespace

Drupal\bootstrap_layout_builder\Plugin\Layout

Code

public function build(array $regions) {
  $build = parent::build($regions);

  // Row classes and attributes.
  $section_classes = [];
  if ($this->configuration['section_classes']) {
    $section_classes = explode(' ', $this->configuration['section_classes']);
    $build['#attributes']['class'] = $section_classes;
  }
  if (!empty($this->configuration['section_attributes'])) {
    $section_attributes = $this->configuration['section_attributes'];
    $build['#attributes'] = NestedArray::mergeDeep($build['#attributes'] ?? [], $section_attributes);
  }

  // The default one col layout class.
  if (count($this
    ->getPluginDefinition()
    ->getRegionNames()) == 1) {
    $config = $this->configFactory
      ->get('bootstrap_layout_builder.settings');
    $one_col_layout_class = 'col-12';
    if ($config
      ->get('one_col_layout_class')) {
      $one_col_layout_class = $config
        ->get('one_col_layout_class');
    }
    $this->configuration['layout_regions_classes']['blb_region_col_1'][] = $one_col_layout_class;
  }

  // Regions classes and attributes.
  if ($this->configuration['regions_classes']) {
    foreach ($this
      ->getPluginDefinition()
      ->getRegionNames() as $region_name) {
      $region_classes = $this->configuration['regions_classes'][$region_name];
      if ($this->configuration['layout_regions_classes'] && isset($this->configuration['layout_regions_classes'][$region_name])) {
        $build[$region_name]['#attributes']['class'] = $this->configuration['layout_regions_classes'][$region_name];
      }
      $build[$region_name]['#attributes']['class'][] = $region_classes;
    }
  }
  if ($this->configuration['regions_attributes']) {
    foreach ($this
      ->getPluginDefinition()
      ->getRegionNames() as $region_name) {
      $region_attributes = $this->configuration['regions_attributes'][$region_name];
      if (!empty($region_attributes)) {
        $build[$region_name]['#attributes'] = NestedArray::mergeDeep($build[$region_name]['#attributes'] ?? [], $region_attributes);
      }
    }
  }

  // Container.
  if ($this->configuration['container']) {
    $theme_wrappers = [
      'blb_container' => [
        '#attributes' => [
          'class' => [
            $this->configuration['container'],
          ],
        ],
      ],
      'blb_container_wrapper' => [
        '#attributes' => [
          'class' => [],
        ],
      ],
    ];
    if ($this->configuration['container_wrapper_classes']) {
      $theme_wrappers['blb_container_wrapper']['#attributes']['class'][] = $this->configuration['container_wrapper_classes'];
    }
    if (!empty($this->configuration['container_wrapper_attributes'])) {
      $wrapper_attributes = $this->configuration['container_wrapper_attributes'];
      $theme_wrappers['blb_container_wrapper']['#attributes'] = NestedArray::mergeDeep($theme_wrappers['blb_container_wrapper']['#attributes'] ?? [], $wrapper_attributes);
    }
    $build['#theme_wrappers'] = $theme_wrappers;

    // Build dynamic styles.
    $build = $this->stylesGroupManager
      ->buildStyles($build, $this->configuration['container_wrapper']['bootstrap_styles'], 'blb_container_wrapper');
  }
  return $build;
}