You are here

public function PictureBackgroundFormatterMedia::viewElements in Picture Background Formatter 8

Builds a renderable array for a field value.

Parameters

\Drupal\Core\Field\FieldItemListInterface $items: The field values to be rendered.

string $langcode: The language that should be used to render the field.

Return value

array A renderable array for $items, as an array of child elements keyed by consecutive numeric indexes starting from 0.

Overrides PictureBackgroundFormatter::viewElements

File

src/Plugin/Field/FieldFormatter/PictureBackgroundFormatterMedia.php, line 36

Class

PictureBackgroundFormatterMedia
Plugin implementation of the 'picture_background_formatter_media' formatter.

Namespace

Drupal\picture_background_formatter\Plugin\Field\FieldFormatter

Code

public function viewElements(FieldItemListInterface $items, $langcode) {
  $media = $this
    ->getEntitiesToView($items, $langcode);
  $files = [];

  // Early opt-out if the field is empty.
  if (empty($media)) {
    return [];
  }

  // The parent entity, used for token replacement in the selector.
  $entity = $items
    ->getEntity();

  /** @var \Drupal\media\MediaInterface $media_item */
  foreach ($media as $delta => $media_item) {
    $type_configuration = method_exists($media_item, 'getSource') ? $media_item
      ->getSource()
      ->getConfiguration() : $media_item
      ->getType()
      ->getConfiguration();

    // Get the actual image entities from the media item.
    $image_items = isset($type_configuration['source_field']) ? $media_item
      ->get($type_configuration['source_field']) : NULL;
    foreach ($image_items as $image_item) {

      // Get each file entity.
      $files[] = $image_item->entity;
    }
  }
  return $this
    ->build_element($files, $entity);
}