function openlayers_field_field_formatter_view in Openlayers 7.3
Implements hook_field_formatter_view().
File
- modules/
openlayers_field/ openlayers_field.module, line 254 - Openlayers field module.
Code
function openlayers_field_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
$element = array();
$settings = $display['settings'];
switch ($display['type']) {
// Render a simple map.
case 'openlayers_map_formatter':
foreach ($items as $delta => $item) {
$element[$delta] = array(
'#type' => 'openlayers',
'#map' => $item['value'],
);
}
break;
// Render an addressfield or a textield.
case 'openlayers_addressfield_textfield_formatter':
$fields = array();
foreach ($items as $delta => $item) {
// If item is an array without a 'value' key (ex: addressfield),
// we convert it to string, else we take the 'safe_value' of the field.
if (is_array($item) && !isset($item['value'])) {
$item = implode(' ', $item);
}
else {
$item = $item['safe_value'];
}
$fields[] = array(
'address' => $item,
'title' => entity_label($entity_type, $entity),
'description' => $item,
);
}
list($map, $layer) = explode(':', $settings['map_layer'], 2);
/** @var \Drupal\openlayers\Types\MapInterface $map */
$map = \Drupal\openlayers\Openlayers::load('map', $map);
/** @var \Drupal\openlayers\Types\LayerInterface $layer */
if ($layer = $map
->getCollection()
->getObjectById('layer', $layer)) {
if ($source = $layer
->getSource()) {
$source
->setOption('geocoder_handler', $settings['geocoder_handler']);
$source
->setOption('geocoder_cache', $settings['geocoder_cache']);
$source
->setOption('fields', $fields);
}
}
$element[0] = array(
'#type' => 'openlayers',
'#map' => $map,
);
break;
// Render a geo file (gpx, kml, etc etc...) on a map.
case 'openlayers_geofile_formatter':
list($map, $layer) = explode(':', $settings['map_layer'], 2);
foreach ($items as $delta => $item) {
/** @var \Drupal\openlayers\Types\MapInterface $map */
$map = \Drupal\openlayers\Openlayers::load('map', $map);
/** @var \Drupal\openlayers\Types\LayerInterface $layer */
if ($layer = $map
->getCollection()
->getObjectById('layer', $layer)) {
if ($source = $layer
->getSource()) {
$source
->setOption('url', file_create_url($item['uri']));
}
}
$element[$delta] = array(
'#type' => 'openlayers',
'#map' => $map,
);
}
break;
}
return $element;
}