You are here

public function OrbitFormatter::viewElements in ZURB Orbit 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 ImageFormatter::viewElements

1 method overrides OrbitFormatter::viewElements()
OrbitMediaFormatter::viewElements in src/Plugin/Field/FieldFormatter/OrbitMediaFormatter.php
Builds a renderable array for a field value.

File

src/Plugin/Field/FieldFormatter/OrbitFormatter.php, line 245

Class

OrbitFormatter
Plugin implementation of the 'Orbit' formatter.

Namespace

Drupal\field_orbit\Plugin\Field\FieldFormatter

Code

public function viewElements(FieldItemListInterface $items, $langcode) {

  // Get image html from parent method.
  $images = parent::viewElements($items, $langcode);
  static $orbit_count;
  $orbit_count = is_int($orbit_count) ? $orbit_count + 1 : 1;
  $files = $this
    ->getEntitiesToView($items, $langcode);
  $elements = [];
  $entity = [];
  $links = [
    'image_link' => 'path',
    'caption_link' => 'caption_path',
  ];

  // Loop through required links (because image and
  // caption can have different links).
  foreach ($items as $delta => $item) {

    // Set Image caption.
    if ($this
      ->getSetting('caption') != '') {
      $caption_settings = $this
        ->getSetting('caption');
      if ($caption_settings == 'title') {
        $item_settings[$delta]['caption'] = $item
          ->getValue()['title'];
      }
      elseif ($caption_settings == 'alt') {
        $item_settings[$delta]['caption'] = $item
          ->getValue()['alt'];
      }
      $item
        ->set('caption', $item_settings[$delta]['caption']);
    }

    // Set Image and Caption Link.
    foreach ($links as $setting => $path) {
      if ($this
        ->getSetting($setting) != '') {
        switch ($this
          ->getSetting($setting)) {
          case 'content':
            $entity = $item
              ->getEntity();
            if (!$entity
              ->isNew()) {
              $uri = $entity
                ->urlInfo();
              $uri = !empty($uri) ? $uri : '';
              $item
                ->set($path, $uri);
            }
            break;
          case 'file':
            foreach ($files as $file_delta => $file) {
              $image_uri = $file
                ->getFileUri();
              $uri = Url::fromUri(file_create_url($image_uri));
              $uri = !empty($uri) ? $uri : '';
              $items[$file_delta]
                ->set($path, $uri);
            }
            break;
        }
      }
    }
  }
  $defaults = $this
    ->defaultSettings();
  if (count($items)) {

    // Only include non-default values to minimize html output.
    $options = [];
    foreach ($defaults as $key => $setting) {

      // Don't pass these to orbit.
      if ($key == 'caption_link' || $key == 'caption' || $key == 'image_style') {
        continue;
      }
      if ($this
        ->getSetting($key) != $setting) {
        $options[$key] = $this
          ->getSetting($key);
      }
    }
    $elements[] = [
      '#theme' => 'field_orbit',
      '#items' => $items,
      '#options' => $options,
      '#entity' => $entity,
      '#image' => $images,
      '#orbit_id' => $orbit_count,
    ];
  }
  return $elements;
}