forked from a64f7bb4-7358-4778-9fbe-3b882c34cc1d/v1
149 lines
4.3 KiB
Twig
149 lines
4.3 KiB
Twig
<?php
|
|
|
|
namespace Drupal\{{ machine_name }}\Plugin\Field\FieldFormatter;
|
|
|
|
{% sort %}
|
|
{% if datetime %}
|
|
use Drupal\Core\Datetime\DrupalDateTime;
|
|
{% endif %}
|
|
use Drupal\Core\Field\FieldItemListInterface;
|
|
use Drupal\Core\Field\FormatterBase;
|
|
{% if formatter_settings %}
|
|
use Drupal\Core\Form\FormStateInterface;
|
|
{% endif %}
|
|
{% if link %}
|
|
use Drupal\Core\Url;
|
|
{% endif %}
|
|
{% if list %}
|
|
use Drupal\{{ machine_name }}\Plugin\Field\FieldType\{{ type_class }};
|
|
{% endif %}
|
|
{% endsort %}
|
|
|
|
/**
|
|
* Plugin implementation of the '{{ field_id }}_default' formatter.
|
|
*
|
|
* @FieldFormatter(
|
|
* id = "{{ field_id }}_default",
|
|
* label = @Translation("Default"),
|
|
* field_types = {"{{ field_id }}"}
|
|
* )
|
|
*/
|
|
class {{ formatter_class }} extends FormatterBase {
|
|
|
|
{% if formatter_settings %}
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public static function defaultSettings() {
|
|
return ['foo' => 'bar'] + parent::defaultSettings();
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function settingsForm(array $form, FormStateInterface $form_state) {
|
|
$settings = $this->getSettings();
|
|
$element['foo'] = [
|
|
'#type' => 'textfield',
|
|
'#title' => $this->t('Foo'),
|
|
'#default_value' => $settings['foo'],
|
|
];
|
|
return $element;
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function settingsSummary() {
|
|
$settings = $this->getSettings();
|
|
$summary[] = $this->t('Foo: @foo', ['@foo' => $settings['foo']]);
|
|
return $summary;
|
|
}
|
|
|
|
{% endif %}
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function viewElements(FieldItemListInterface $items, $langcode) {
|
|
$element = [];
|
|
|
|
foreach ($items as $delta => $item) {
|
|
|
|
{% for subfield in subfields %}
|
|
{% if subfield.type == 'boolean' %}
|
|
$element[$delta]['{{ subfield.machine_name }}'] = [
|
|
'#type' => 'item',
|
|
'#title' => $this->t('{{ subfield.name }}'),
|
|
'#markup' => $item->{{ subfield.machine_name }} ? $this->t('Yes') : $this->t('No'),
|
|
];
|
|
|
|
{% else %}
|
|
if ($item->{{ subfield.machine_name }}) {
|
|
{% if subfield.list %}
|
|
$allowed_values = {{ type_class }}::{{ subfield.allowed_values_method }}();
|
|
{% endif %}
|
|
{% set item_value %}
|
|
{% if subfield.list %}$allowed_values[$item->{{ subfield.machine_name }}]{% else %}$item->{{ subfield.machine_name }}{% endif %}
|
|
{% endset %}
|
|
{% if subfield.type == 'datetime' %}
|
|
$date = DrupalDateTime::createFromFormat('{{ subfield.date_storage_format }}', $item->{{ subfield.machine_name }});
|
|
// @DCG: Consider injecting the date formatter service.
|
|
// @codingStandardsIgnoreStart
|
|
$date_formatter = \Drupal::service('date.formatter');
|
|
// @codingStandardsIgnoreStart
|
|
$timestamp = $date->getTimestamp();
|
|
{% if subfield.list %}
|
|
$formatted_date = {{ item_value }};
|
|
{% else %}
|
|
$formatted_date = $date_formatter->format($timestamp, 'long');
|
|
{% endif %}
|
|
$iso_date = $date_formatter->format($timestamp, 'custom', 'Y-m-d\TH:i:s') . 'Z';
|
|
$element[$delta]['{{ subfield.machine_name }}'] = [
|
|
'#type' => 'item',
|
|
'#title' => $this->t('{{ subfield.name }}'),
|
|
'content' => [
|
|
'#theme' => 'time',
|
|
'#text' => $formatted_date,
|
|
'#html' => FALSE,
|
|
'#attributes' => [
|
|
'datetime' => $iso_date,
|
|
],
|
|
'#cache' => [
|
|
'contexts' => [
|
|
'timezone',
|
|
],
|
|
],
|
|
],
|
|
];
|
|
{% else %}
|
|
$element[$delta]['{{ subfield.machine_name }}'] = [
|
|
'#type' => 'item',
|
|
'#title' => $this->t('{{ subfield.name }}'),
|
|
{% if subfield.link %}
|
|
'content' => [
|
|
'#type' => 'link',
|
|
'#title' => {{ item_value }},
|
|
{% if subfield.type == 'email' %}
|
|
'#url' => Url::fromUri('mailto:' . $item->{{ subfield.machine_name }}),
|
|
{% elseif subfield.type == 'telephone' %}
|
|
'#url' => Url::fromUri('tel:' . rawurlencode(preg_replace('/\s+/', '', $item->{{ subfield.machine_name }}))),
|
|
{% elseif subfield.type == 'uri' %}
|
|
'#url' => Url::fromUri($item->{{ subfield.machine_name }}),
|
|
{% endif %}
|
|
],
|
|
{% else %}
|
|
'#markup' => {{ item_value }},
|
|
{% endif %}
|
|
];
|
|
{% endif %}
|
|
}
|
|
|
|
{% endif %}
|
|
{% endfor %}
|
|
}
|
|
|
|
return $element;
|
|
}
|
|
|
|
}
|