You are here

public function Table::viewElements in Double Field 4.x

Same name and namespace in other branches
  1. 8.3 src/Plugin/Field/FieldFormatter/Table.php \Drupal\double_field\Plugin\Field\FieldFormatter\Table::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

src/Plugin/Field/FieldFormatter/Table.php, line 87

Class

Table
Plugin implementations for 'table' formatter.

Namespace

Drupal\double_field\Plugin\Field\FieldFormatter

Code

public function viewElements(FieldItemListInterface $items, $langcode) : array {
  $settings = $this
    ->getSettings();
  $table = [
    '#type' => 'table',
  ];

  // No other way to pass context to the theme.
  // @see double_field_theme_suggestions_table_alter()
  $table['#attributes']['double-field--field-name'] = $items
    ->getName();
  $table['#attributes']['class'][] = 'double-field-table';
  if ($settings['first_column_label'] || $settings['second_column_label']) {
    if ($settings['number_column']) {
      $header[] = $settings['number_column_label'];
    }
    $header[] = $settings['first_column_label'];
    $header[] = $settings['second_column_label'];
    $table['#header'] = $header;
  }
  $field_name = $items
    ->getName();
  foreach ($items as $delta => $item) {
    $row = [];
    if ($settings['number_column']) {
      $row[]['#markup'] = $delta + 1;
    }
    foreach ([
      'first',
      'second',
    ] as $subfield) {
      if ($settings[$subfield]['hidden']) {
        $row[]['#markup'] = '';
      }
      else {
        $row[] = [
          '#theme' => 'double_field_subfield',
          '#settings' => $settings,
          '#subfield' => $item->{$subfield},
          '#index' => $subfield,
          '#field_name' => $field_name,
        ];
      }
    }
    $table[$delta] = $row;
  }
  $element[0] = $table;
  return $element;
}