protected function Base::prepareItems in Double Field 8.3
Same name and namespace in other branches
- 4.x src/Plugin/Field/FieldFormatter/Base.php \Drupal\double_field\Plugin\Field\FieldFormatter\Base::prepareItems()
Prepare field items.
Parameters
\Drupal\Core\Field\FieldItemListInterface $items: List of field items.
1 call to Base::prepareItems()
- Base::view in src/
Plugin/ Field/ FieldFormatter/ Base.php - Builds a renderable array for a fully themed field.
File
- src/
Plugin/ Field/ FieldFormatter/ Base.php, line 243
Class
- Base
- Base class for Double field formatters.
Namespace
Drupal\double_field\Plugin\Field\FieldFormatterCode
protected function prepareItems(FieldItemListInterface $items) {
$field_settings = $this
->getFieldSettings();
$settings = $this
->getSettings();
// @todo Remove this in 4.0.
foreach ([
'first',
'second',
] as $subfield) {
if ($settings[$subfield]['prefix']) {
@trigger_error('Prefix formatter setting is deprecated in double_field:8.x-3.4 and will be removed in double_field:8.x-4.0.', E_USER_DEPRECATED);
}
if ($settings[$subfield]['suffix']) {
@trigger_error('Suffix formatter setting is deprecated in double_field:8.x-3.4 and will be removed in double_field:8.x-4.0.', E_USER_DEPRECATED);
}
}
foreach ($items as $delta => $item) {
foreach ([
'first',
'second',
] as $subfield) {
if ($settings[$subfield]['hidden']) {
$item->{$subfield} = FALSE;
}
else {
$type = $field_settings['storage'][$subfield]['type'];
if ($type == 'boolean') {
$item->{$subfield} = $field_settings[$subfield][$item->{$subfield} ? 'on_label' : 'off_label'];
}
if ($type == 'numeric' || $type == 'float' || $type == 'integer') {
$item->{$subfield} = $this
->numberFormat($subfield, $item->{$subfield});
}
if ($type == 'datetime_iso8601' && $item->{$subfield} && !$field_settings[$subfield]['list']) {
// We follow the same principles as Drupal Core.
// In the case of a datetime subfield, the date must be parsed using
// the storage time zone and converted to the user's time zone while
// a date-only field should have no timezone conversion performed.
$timezone = $field_settings['storage'][$subfield]['datetime_type'] === 'datetime' ? date_default_timezone_get() : DoubleFieldItem::DATETIME_STORAGE_TIMEZONE;
$timestamp = $items[$delta]
->createDate($subfield)
->getTimestamp();
$date_formatter = self::getDateFormatter();
$item->{$subfield} = [
'#theme' => 'time',
'#text' => $date_formatter
->format($timestamp, $settings[$subfield]['format_type'], '', $timezone),
'#html' => FALSE,
'#attributes' => [
'datetime' => $date_formatter
->format($timestamp, 'custom', 'Y-m-d\\TH:i:s') . 'Z',
],
'#cache' => [
'contexts' => [
'timezone',
],
],
];
}
// Replace the value with its label if possible.
$original_value[$subfield] = $item->{$subfield};
if ($field_settings[$subfield]['list']) {
if (isset($field_settings[$subfield]['allowed_values'][$item->{$subfield}])) {
$item->{$subfield} = $field_settings[$subfield]['allowed_values'][$item->{$subfield}];
}
else {
$item->{$subfield} = FALSE;
}
}
if (!empty($settings[$subfield]['link'])) {
$value = isset($original_value) ? $original_value[$subfield] : $item->{$subfield};
switch ($type) {
case 'email':
$item->{$subfield} = [
'#type' => 'link',
'#title' => $item->{$subfield},
'#url' => Url::fromUri('mailto:' . $value),
];
break;
case 'telephone':
$item->{$subfield} = [
'#type' => 'link',
'#title' => $item->{$subfield},
'#url' => Url::fromUri('tel:' . rawurlencode(preg_replace('/\\s+/', '', $value))),
'#options' => [
'external' => TRUE,
],
];
break;
case 'uri':
$item->{$subfield} = [
'#type' => 'link',
'#title' => $item->{$subfield},
'#url' => Url::fromUri($value),
'#options' => [
'external' => TRUE,
],
];
break;
}
}
}
}
$items[$delta] = $item;
}
}