You are here

public function LayoutParagraphsFormatter::buildLayoutContainer in Layout Paragraphs 1.0.x

Builds the structure for a single layout paragraph item.

Also adds elements for the layout instance and regions. Regions will be populated with paragraphs further down the line, then rendered in the layout.

Parameters

\Drupal\paragraphs\ParagraphInterface $layout_entity: The layout paragraph to render.

array $entities: The array of remaining entities to process, adding to layout entity where applicable.

Return value

array Returns a build array.

Throws

\Drupal\Component\Plugin\Exception\PluginException

\Drupal\Component\Plugin\Exception\PluginNotFoundException

\Drupal\Core\TypedData\Exception\MissingDataException

1 call to LayoutParagraphsFormatter::buildLayoutContainer()
LayoutParagraphsFormatter::buildLayoutTree in src/Plugin/Field/FieldFormatter/LayoutParagraphsFormatter.php
Builds the structure for the entire layout.

File

src/Plugin/Field/FieldFormatter/LayoutParagraphsFormatter.php, line 171

Class

LayoutParagraphsFormatter
Layout Paragraphs field formatter.

Namespace

Drupal\layout_paragraphs\Plugin\Field\FieldFormatter

Code

public function buildLayoutContainer(ParagraphInterface $layout_entity, array &$entities) {

  /** @var Drupal\layout_paragraphs\Plugin\Field\FieldType\EntityReferenceLayoutRevisioned $referringItem */
  $layout = $layout_entity
    ->getBehaviorSetting('layout_paragraphs', 'layout', '');
  $config = $layout_entity
    ->getBehaviorSetting('layout_paragraphs', 'config', []);
  $layout_uuid = $layout_entity
    ->uuid();
  if (!$this->layoutPluginManager
    ->getDefinition($layout, FALSE)) {
    $messenger = \Drupal::messenger();
    $messenger
      ->addMessage($this
      ->t('Layout `%layout_id` is unknown.', [
      '%layout_id' => $layout,
    ]), 'warning');
    return [];
  }
  $layout_instance = $this->layoutPluginManager
    ->createInstance($layout, $config);
  $build = $this
    ->buildEntityView($layout_entity);
  $build['regions'] = [];
  foreach ($entities as $index => $entity) {
    $parent_uuid = $entity
      ->getBehaviorSetting('layout_paragraphs', 'parent_uuid', '');
    $region = $entity
      ->getBehaviorSetting('layout_paragraphs', 'region', '');
    if ($parent_uuid == $layout_uuid && !empty($region)) {
      unset($entities[$index]);
      if ($entity
        ->getBehaviorSetting('layout_paragraphs', 'layout', '')) {
        $build['regions'][$region][$entity
          ->uuid()] = $this
          ->buildLayoutContainer($entity, $entities);
      }
      else {
        $build['regions'][$region][$entity
          ->uuid()] = $this
          ->buildEntityView($entity);
      }
    }
  }
  $build['regions'] = [
    '#weight' => 1000,
  ] + $layout_instance
    ->build($build['regions']);
  return $build;
}