public function GeolocationMapFormatterBase::viewElements in Geolocation Field 8.2
Same name and namespace in other branches
- 8.3 src/Plugin/Field/FieldFormatter/GeolocationMapFormatterBase.php \Drupal\geolocation\Plugin\Field\FieldFormatter\GeolocationMapFormatterBase::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/ GeolocationMapFormatterBase.php, line 300
Class
- GeolocationMapFormatterBase
- Plugin base for Map based formatters.
Namespace
Drupal\geolocation\Plugin\Field\FieldFormatterCode
public function viewElements(FieldItemListInterface $items, $langcode) {
if ($items
->count() == 0) {
return [];
}
$elements = [];
$settings = $this
->getSettings();
$locations = [];
foreach ($items as $delta => $item) {
$item_position = $this->dataProvider
->getPositionsFromItem($item);
if (empty($item_position)) {
continue;
}
$title = $this->dataProvider
->replaceFieldItemTokens($settings['title'], $item);
if (empty($title)) {
$title = $item_position['lat'] . ', ' . $item_position['lng'];
}
$location = [
'#type' => 'geolocation_map_location',
'#title' => $title,
'#disable_marker' => empty($settings['set_marker']) ? TRUE : FALSE,
'#position' => [
'lat' => $item_position['lat'],
'lng' => $item_position['lng'],
],
'#weight' => $delta,
];
if (!empty($settings['info_text']['value']) && !empty($settings['info_text']['format'])) {
$location['content'] = [
'#type' => 'processed_text',
'#text' => $this->dataProvider
->replaceFieldItemTokens($settings['info_text']['value'], $item),
'#format' => $settings['info_text']['format'],
];
}
$locations[] = $location;
}
$element_pattern = [
'#type' => 'geolocation_map',
'#settings' => $settings['map_provider_settings'],
'#maptype' => $settings['map_provider_id'],
'#centre' => [
'lat' => 0,
'lng' => 0,
],
'#context' => [
'formatter' => $this,
],
];
if (!empty($settings['common_map'])) {
$elements = [
0 => $element_pattern,
];
$elements[0]['#id'] = uniqid("map-");
foreach ($locations as $delta => $location) {
$elements[0][$delta] = $location;
}
$elements[0] = $this->mapCenterManager
->alterMap($elements[0], $settings['centre'], [
'formatter' => $this,
]);
}
else {
foreach ($locations as $delta => $location) {
$elements[$delta] = $element_pattern;
$elements[$delta]['#id'] = uniqid("map-" . $delta . "-");
$elements[$delta]['content'] = $location;
$elements[$delta] = $this->mapCenterManager
->alterMap($elements[$delta], $settings['centre'], [
'formatter' => $this,
]);
}
}
if ($settings['use_overridden_map_settings'] && !empty($items
->get(0)) && !empty($items
->get(0)
->getValue()['data']['map_provider_settings']) && is_array($items
->get(0)
->getValue()['data']['map_provider_settings'])) {
$map_settings = $this->mapProvider
->getSettings($items
->get(0)
->getValue()['data']['map_provider_settings']);
if (!empty($settings['common_map'])) {
$elements[0]['#settings'] = $map_settings;
}
else {
foreach (Element::children($elements) as $delta => $element) {
$elements[$delta]['#settings'] = $map_settings;
}
}
}
return $elements;
}