public function GeolocationGoogleMapFormatter::viewElements in Geolocation Field 8
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/ GeolocationGoogleMapFormatter.php, line 151
Class
- GeolocationGoogleMapFormatter
- Plugin implementation of the 'geolocation_googlemap' formatter.
Namespace
Drupal\geolocation\Plugin\Field\FieldFormatterCode
public function viewElements(FieldItemListInterface $items, $langcode) {
if ($items
->count() == 0) {
return [];
}
$settings = $this
->getSettings();
$map_settings = $this
->getGoogleMapsSettings($this
->getSettings());
if ($settings['use_overridden_map_settings'] && !empty($items
->get(0)
->getValue()['data']['google_map_settings']) && is_array($items
->get(0)
->getValue()['data']['google_map_settings'])) {
$map_settings = $this
->getGoogleMapsSettings($items
->get(0)
->getValue()['data']);
}
$render_array = [
'#theme' => 'geolocation_map_formatter',
'#attached' => [
'library' => [
'geolocation/geolocation.formatter.googlemap',
],
'drupalSettings' => [
'geolocation' => [
'google_map_url' => $this
->getGoogleMapsApiUrl(),
],
],
],
];
if (empty($settings['set_marker'])) {
$single_map = $render_array;
$unique_id = uniqid("map-canvas-");
if ($single_center = $items
->get(0)) {
$single_map['#latitude'] = $items
->get(0)
->getValue()['lat'];
$single_map['#longitude'] = $items
->get(0)
->getValue()['lng'];
}
$single_map['#uniqueid'] = $unique_id;
$single_map['#attached']['drupalSettings']['geolocation']['maps'][$unique_id] = [
'settings' => $map_settings,
];
return $single_map;
}
$elements = [];
$token_context = [
$this->fieldDefinition
->getTargetEntityTypeId() => $items
->getEntity(),
];
$locations = [];
foreach ($items as $delta => $item) {
$token_context['geolocation_current_item'] = $item;
$title = \Drupal::token()
->replace($settings['title'], $token_context, [
'callback' => [
$this,
'geolocationItemTokens',
],
'clear' => TRUE,
]);
$title = PlainTextOutput::renderFromHtml($title);
if (empty($title)) {
$title = $item->lat . ', ' . $item->lng;
}
$content = \Drupal::token()
->replace($settings['info_text'], $token_context, [
'callback' => [
$this,
'geolocationItemTokens',
],
'clear' => TRUE,
]);
$content = PlainTextOutput::renderFromHtml($content);
$location = [
'#theme' => 'geolocation_common_map_location',
'#content' => $content,
'#title' => $title,
'#position' => [
'lat' => $item->lat,
'lng' => $item->lng,
],
];
if (!empty($settings['common_map'])) {
$locations[] = $location;
}
else {
$unique_id = uniqid("map-canvas-");
$elements[$delta] = $render_array;
$elements[$delta]['#locations'] = [
$location,
];
$elements[$delta]['#uniqueid'] = $unique_id;
$elements[$delta]['#attached']['drupalSettings']['geolocation']['maps'][$unique_id] = [
'settings' => $map_settings,
];
}
}
if (!empty($settings['common_map'])) {
$unique_id = uniqid("map-canvas-");
$elements = $render_array;
$elements['#locations'] = $locations;
$elements['#uniqueid'] = $unique_id;
$elements['#attached']['drupalSettings']['geolocation']['maps'][$unique_id] = [
'settings' => $map_settings,
];
}
return $elements;
}