You are here

public function DynamicLayout::build in Dynamic Layouts 8

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/DynamicLayout.php, line 58

Class

DynamicLayout
Dynamically prepare the dynamic layout build.

Namespace

Drupal\dynamic_layouts\Plugin\Layout

Code

public function build(array $regions) {

  // Get the layout config entity type & entity id from the plugin id.
  $plugin_id = $this
    ->getPluginId();
  list($entity_type, $entity_id) = explode(':', $plugin_id);

  /* @var \Drupal\dynamic_layouts\DynamicLayoutInterface $config_entity */
  $rows = [];
  if ($config_entity = $this->entityTypeManager
    ->getStorage($entity_type)
    ->load($entity_id)) {
    $rows = $config_entity
      ->getRows();
  }

  // Ensure $build only contains defined regions and in the order defined.
  $build = [];
  foreach ($this
    ->getPluginDefinition()
    ->getRegionNames() as $region_name) {
    if (array_key_exists($region_name, $regions)) {
      $build[$region_name] = $regions[$region_name];
    }
  }
  $build['#settings'] = $this
    ->getConfiguration();
  $build['#layout'] = $this->pluginDefinition;
  $build['#wrapperClasses'] = $this
    ->getWrapperClasses();
  $build['#theme'] = $this->pluginDefinition
    ->getThemeHook();
  if ($library = $this->pluginDefinition
    ->getLibrary()) {
    $build['#attached']['library'][] = $library;
  }
  if ($this->settings
    ->getFrontendLibrary() == 'custom') {
    $build['#attached']['library'][] = 'dynamic_layouts/dynamic_layouts_frontend';
  }
  $build['rows'] = [
    '#markup' => $rows,
  ];
  return $build;
}