You are here

public function OptionsDefaultFormatter::viewElements in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/options/src/Plugin/Field/FieldFormatter/OptionsDefaultFormatter.php \Drupal\options\Plugin\Field\FieldFormatter\OptionsDefaultFormatter::viewElements()
  2. 10 core/modules/options/src/Plugin/Field/FieldFormatter/OptionsDefaultFormatter.php \Drupal\options\Plugin\Field\FieldFormatter\OptionsDefaultFormatter::viewElements()

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 FormatterInterface::viewElements

File

core/modules/options/src/Plugin/Field/FieldFormatter/OptionsDefaultFormatter.php, line 28

Class

OptionsDefaultFormatter
Plugin implementation of the 'list_default' formatter.

Namespace

Drupal\options\Plugin\Field\FieldFormatter

Code

public function viewElements(FieldItemListInterface $items, $langcode) {
  $elements = [];

  // Only collect allowed options if there are actually items to display.
  if ($items
    ->count()) {
    $provider = $items
      ->getFieldDefinition()
      ->getFieldStorageDefinition()
      ->getOptionsProvider('value', $items
      ->getEntity());

    // Flatten the possible options, to support opt groups.
    $options = OptGroup::flattenOptions($provider
      ->getPossibleOptions());
    foreach ($items as $delta => $item) {
      $value = $item->value;

      // If the stored value is in the current set of allowed values, display
      // the associated label, otherwise just display the raw value.
      $output = isset($options[$value]) ? $options[$value] : $value;
      $elements[$delta] = [
        '#markup' => $output,
        '#allowed_tags' => FieldFilteredMarkup::allowedTags(),
      ];
    }
  }
  return $elements;
}