You are here

public function BlazyOEmbedFormatter::buildElements in Blazy 8.2

Build the blazy elements.

File

src/Plugin/Field/FieldFormatter/BlazyOEmbedFormatter.php, line 62

Class

BlazyOEmbedFormatter
Plugin for blazy oembed formatter.

Namespace

Drupal\blazy\Plugin\Field\FieldFormatter

Code

public function buildElements(array &$build, $items) {
  $settings = $build['settings'];
  foreach ($items as $delta => $item) {
    $main_property = $item
      ->getFieldDefinition()
      ->getFieldStorageDefinition()
      ->getMainPropertyName();
    $value = trim($item->{$main_property});
    if (empty($value)) {
      continue;
    }
    $settings['delta'] = $delta;
    $settings['input_url'] = $value;
    $image_item = NULL;

    // Attempts to fetch media entity.
    $media = $this->formatter
      ->getEntityTypeManager()
      ->getStorage('media')
      ->loadByProperties([
      $settings['field_name'] => $value,
    ]);
    if ($media = reset($media)) {
      if ($media
        ->hasTranslation($settings['current_language'])) {
        $media = $media
          ->getTranslation($settings['current_language']);
      }
      $data['settings'] = $settings;
      $this->blazyOembed
        ->getMediaItem($data, $media);

      // Update data with local image.
      $settings = array_merge($settings, $data['settings']);
      $image_item = isset($data['item']) ? $data['item'] : NULL;
    }
    $box = [
      'item' => $image_item,
      'settings' => $settings,
    ];

    // Media OEmbed with lazyLoad and lightbox supports.
    $build[$delta] = $this->formatter
      ->getBlazy($box);
    unset($box);
  }
}