You are here

function views_field_formatter_tokens in Views field formatter 8.2

Implements hook_tokens().

File

./views_field_formatter.module, line 123

Code

function views_field_formatter_tokens($type, $tokens, array $data = [], array $options = []) {
  $replacements = [];
  if (!isset($data['views_field_formatter'])) {
    return [];
  }

  // @var \Drupal\Core\Entity\ContentEntityInterface $entity
  $entity = $data['entity'];
  if (!$entity instanceof ContentEntityInterface) {
    return $replacements;
  }
  foreach ($tokens as $name => $original) {

    // Do not continue if the $name doesn't contains a semicolon.
    if (\strpos($name, ':') === FALSE) {
      continue;
    }

    // Do not continue if the field is empty.
    if ($data['views_field_formatter']['items']
      ->isEmpty()) {
      continue;
    }
    list(, $delta) = \explode(':', $name, 2);

    // Do not continue if $delta is null.
    if ($delta === NULL) {
      continue;
    }

    // Handle [entity:field_name:delta].
    if ($delta === 'delta') {
      $replacements[$original] = $data['views_field_formatter']['delta'];
    }

    // Handle [entity:field_name:current].
    if ($delta === 'current') {
      if ($field_delta = $data['views_field_formatter']['items'][$data['views_field_formatter']['delta']]) {
        $field_output = $field_delta
          ->view();
        $replacements[$original] = \Drupal::service('renderer')
          ->renderPlain($field_output);
      }
    }

    // Handle [entity:field_name:concat:*].
    if (\strpos($delta, 'concat:') === 0) {
      list($third_part, $fourth_part) = \explode(':', $delta, 2);
      if ($third_part === 'concat' && $fourth_part !== NULL) {
        $field_pieces = [];
        foreach ($data['views_field_formatter']['items'] as $item) {
          $item = $item
            ->view();
          $field_pieces[] = \Drupal::service('renderer')
            ->renderPlain($item);
        }
        $replacements[$original] = \implode($fourth_part, $field_pieces);
      }
    }
  }
  return $replacements;
}