You are here

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

Same name and namespace in other branches
  1. 2.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 74

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);
  $config = $this->configFactory
    ->get('bootstrap_layout_builder.settings');

  // Flag for local video.
  $has_background_local_video = FALSE;

  // Container.
  if ($this->configuration['container']) {
    $build['container']['#attributes']['class'] = $this->configuration['container'];
    if ($media_id = $this->configuration['container_wrapper_bg_media']) {
      $media_entity = Media::load($media_id);
      if ($media_entity) {
        $bundle = $media_entity
          ->bundle();
        if ($config
          ->get('background_image.bundle') && $bundle == $config
          ->get('background_image.bundle')) {
          $media_field_name = $config
            ->get('background_image.field');

          // Check if the field exist.
          if ($media_entity
            ->hasField($media_field_name)) {
            $build['container_wrapper']['#attributes']['style'] = $this
              ->buildBackgroundMediaImage($media_entity, $media_field_name);
          }
        }
        elseif ($config
          ->get('background_local_video.bundle') && $bundle == $config
          ->get('background_local_video.bundle')) {
          $media_field_name = $config
            ->get('background_local_video.field');
          $has_background_local_video = TRUE;
          $build['container_wrapper']['#video_wrapper_classes'] = $this->configuration['container_wrapper_bg_color_class'];

          // Check if the field exist.
          if ($media_entity
            ->hasField($media_field_name)) {
            $build['container_wrapper']['#video_background_url'] = $this
              ->buildBackgroundMediaLocalVideo($media_entity, $media_field_name);
          }
        }
      }
    }
    if ($this->configuration['container_wrapper_bg_color_class'] || $this->configuration['container_wrapper_classes']) {
      $container_wrapper_classes = '';
      if ($this->configuration['container_wrapper_bg_color_class'] && !$has_background_local_video) {
        $container_wrapper_classes .= $this->configuration['container_wrapper_bg_color_class'];
      }
      if ($this->configuration['container_wrapper_classes']) {

        // Add space after the last class.
        if ($container_wrapper_classes) {
          $container_wrapper_classes = $container_wrapper_classes . ' ';
        }
        $container_wrapper_classes .= $this->configuration['container_wrapper_classes'];
      }
      $build['container_wrapper']['#attributes']['class'] = $container_wrapper_classes;
    }
  }

  // Section Classes.
  $section_classes = [];
  if ($this->configuration['section_classes']) {
    $section_classes = explode(' ', $this->configuration['section_classes']);
    $build['#attributes']['class'] = $section_classes;
  }

  // Regions classes.
  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;
    }
  }
  return $build;
}