Leaflet - kategoriebasierte Markericons in Views erstellen

Ich bin gerade dabei die Seite Ferienwohnung Harzgerode um eine Karte mit Ausflugszielen zu erweitern. Für die Kartenfunktionalität bietet sich ja das leaflet Modul von Drupal an. Dies bietet neben einer Views Integration eigentlich alles, was man sonst von der Google Maps API oder dem mächtigerem openlayers.org Projekt so kennt.

Eine kleine Einführung in das Thema Mapping bzw. generell Geodaten in Drupal hatte ich vor einiger Zeit auch schon einmal bei einem DrupalUserGroup Treffen in Hannover gegeben. Geodaten in Drupal

Kategoriebasierte Marker erzeugen

Für die oben schon erwähnte Seite sollen Sehenswürdigkeiten in verschiedene Kategorien eingeordnet werden können. Dies lässt sich ja recht einfach über ein zusätzliches Taxonomie Feld umsetzen, welches man dem entsprechenden Node Type zuordnet. Dem Vokabular Sehenswürdigkeiten wird noch ein zusätzliches Bild Feld mit dem Namen Icon zugeordnet.
Damit wäre der erste Schritt getan - doch wie bringen wir das Ganze Leaflet bei. Hierfür bringt das leaflet_views Modul einen Hook mit, in dem sich die Ausgabe der Punkte überschreiben lässt. In diesem Fall soll hier noch der Parameter iconUrl für den Point gesetzt werden.

Folgendes Code Snippet zeigt die Umsetzung:

<?php
/**
 * Implements hook_leaflet_views_alter_points_data_alter().
 */
function fewo_map_leaflet_views_alter_points_data_alter($result, &$points) {
 // Get node object of result.
 $wrapped_node = entity_metadata_wrapper('node', $result->nid);
 // Check if we have a category attached to node.
 $category = $wrapped_node->field_sight_category->value();
 if (!empty($category)) {
  // Check if we have a custom category icon for taxonomy term.
  $category_icon = $wrapped_node->field_sight_category->field_sight_icon->value();
  if (!empty($category_icon)) {
    // Create url for usage as marker icon.
    $icon_url = file_create_url($category_icon['uri']);
    // Set icon as marker icon for point.
    $points[0]['icon']['iconUrl'] = $icon_url;
  }
 }
}
?>

Ausgabe kann dann wie folgt erfolgen:

Blog-Kategorien: