public function GeolocationMapFormatterBase::viewElements in Geolocation Field 8.3
Same name and namespace in other branches
- 8.2 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 320
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 = $this
->getLocations($items);
$parent_entity = $items
->getEntity();
$element_pattern = [
'#type' => 'geolocation_map',
'#settings' => $settings['map_provider_settings'],
'#maptype' => $settings['map_provider_id'],
'#centre' => [],
'#context' => [
'formatter' => $this,
],
];
if (!empty($parent_entity)) {
$element_pattern['#context'][$parent_entity
->getEntityTypeId()] = $parent_entity;
}
if (!empty($settings['common_map'])) {
$elements = [
0 => $element_pattern,
];
$elements[0]['#id'] = uniqid("map-");
foreach ($locations as $delta => $location) {
if (!empty($settings['show_delta_label'])) {
$location['#label'] = $delta + 1;
}
$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;
}