You are here

public function BlockBase::build in Display Suite 8.2

Same name and namespace in other branches
  1. 8.4 src/Plugin/DsField/BlockBase.php \Drupal\ds\Plugin\DsField\BlockBase::build()
  2. 8.3 src/Plugin/DsField/BlockBase.php \Drupal\ds\Plugin\DsField\BlockBase::build()

Renders a field.

Overrides DsFieldBase::build

File

src/Plugin/DsField/BlockBase.php, line 74

Class

BlockBase
The base plugin to create DS block fields.

Namespace

Drupal\ds\Plugin\DsField

Code

public function build() {

  // Get block.
  $block = $this
    ->getBlock();

  // Apply block config.
  $block_config = $this
    ->blockConfig();
  $block
    ->setConfiguration($block_config);
  if ($block
    ->access(\Drupal::currentUser())) {

    // Inject context values.
    if ($block instanceof ContextAwarePluginInterface) {
      $contexts = $this->contextRepository
        ->getRuntimeContexts(array_values($block
        ->getContextMapping()));
      $this->contextHandler
        ->applyContextMapping($block, $contexts);
    }
    $block_elements = $block
      ->build();

    // Merge cache contexts, tags and max-age
    if ($contexts = $block
      ->getCacheContexts()) {
      $block_elements['#cache']['contexts'] = is_array($block_elements['#cache']['contexts']) ? $block_elements['#cache']['contexts'] : [];
      $block_elements['#cache']['contexts'] = array_unique(array_merge($block_elements['#cache']['contexts'], $contexts));
    }
    if ($tags = $block
      ->getCacheTags()) {
      $block_elements['#cache']['tags'] = is_array($block_elements['#cache']['tags']) ? $block_elements['#cache']['tags'] : [];
      $block_elements['#cache']['tags'] = array_unique(array_merge($block_elements['#cache']['tags'], $tags));
    }

    // Add the block base config cache tag
    $block_elements['#cache']['tags'][] = 'config:ds.block_base';
    if ($max_age = $block
      ->getCacheMaxAge()) {
      $block_elements['#cache']['max-age'] = $max_age;
    }

    // Return an empty array if there is nothing to render.
    return Element::isEmpty($block_elements) ? [] : $block_elements;
  }
  return [];
}