3 namespace Drupal\{{ machine_name }}\Plugin\Field\FieldFormatter;
7 use Drupal\Core\Datetime\DrupalDateTime;
9 use Drupal\Core\Field\FieldItemListInterface;
10 use Drupal\Core\Field\FormatterBase;
12 use Drupal\{{ machine_name }}\Plugin\Field\FieldType\{{ type_class }};
17 * Plugin implementation of the '{{ field_id }}_key_value' formatter.
20 * id = "{{ field_id }}_key_value",
21 * label = @Translation("Key-value"),
22 * field_types = {"{{ field_id }}"}
25 class {{ key_value_formatter_class }} extends FormatterBase {
30 public function viewElements(FieldItemListInterface $items, $langcode) {
34 foreach ($items as $delta => $item) {
40 {% for subfield in subfields %}
41 // {{ subfield.name }}.
42 if ($item->{{ subfield.machine_name }}) {
43 {% if subfield.type == 'datetime' %}
44 $date = DrupalDateTime::createFromFormat('{{ subfield.date_storage_format }}', $item->{{ subfield.machine_name }});
45 $date_formatter = \Drupal::service('date.formatter');
46 $timestamp = $date->getTimestamp();
47 {% if subfield.list %}
48 $allowed_values = {{ type_class }}::{{ subfield.allowed_values_method }}();
49 $formatted_date = $allowed_values[$item->{{ subfield.machine_name }}];
51 $formatted_date = $date_formatter->format($timestamp, 'long');
53 $iso_date = $date_formatter->format($timestamp, 'custom', 'Y-m-d\TH:i:s') . 'Z';
55 {% elseif subfield.list %}
56 $allowed_values = {{ type_class }}::{{ subfield.allowed_values_method }}();
64 '#markup' => $this->t('{{ subfield.name }}'),
69 {% if subfield.type == 'boolean' %}
70 '#markup' => $item->{{ subfield.machine_name }} ? $this->t('Yes') : $this->t('No'),
71 {% elseif subfield.type == 'datetime' %}
73 '#text' => $formatted_date,
76 'datetime' => $iso_date,
84 {% if subfield.list %}
85 '#markup' => $allowed_values[$item->{{ subfield.machine_name }}],
87 '#markup' => $item->{{ subfield.machine_name }},
93 'no_striping' => TRUE,
98 $element[$delta] = $table;