Google Map in Drupal 7

veröffentlicht von gülmez am Mo., 02.11.2015 - 09:30
Rule für Simple Google Maps

Zur Darstellung eines Standortes in Form einer Karte (Google Map, OpenStreetMap, MapQuest, OSM, etc,...) gibt es in Drupal unzählige Herangehensweisen. Von der Einbindung eines  Embed-Code bis hin zur Verwendung von mehreren Modulen in Kombination (openlayers, geofield, geophp, geocoder, etc.).

Ich wollte eine einfache Google Map anzeigen wobei die Adresse durch mehrere Felder bereitgestellt wird (Feld für Straße, Feld für Hausnummer, Feld für PLZ und Feld für Ort).

Dabei wollte ich so wenig Module wie möglich einsetzen. So schien mir nach kurzer Recherche das Modul Simple Google Maps die richtige Wahl.  Die Funktionsweise des Moduls ist schnell erklärt:
Ein Textfeld für die Adresse im Inhaltstypen anlegen, unter "Manage Display" als Formatter "Google Map from one-line address" auswählen - das war's! Eigentlich verständlich, schließlich soll das Modul ja so simpel wie möglich sein.

Was ich aber trotzdem übersehen hatte und erst nach der Installation feststellte war die Tatsache das "Simple Google Maps" nur ein Feld mit der kompletten Adresse erlaubt. Wie füge ich jetzt meine getrennten Felder zu einem Feld zusammen?

Zunächst habe ich in meinem Inhaltstyp ein neues Text-Feld angelegt welches als Quelle für "Simple Google Maps" dienen sollte (nennen wir es field-google-map-adresse). In diesem Feld sollten nun die einzelnen Felder für Straße, Hausnummer, PLZ und Ort zusammengeführt werden (nennen wir sie field-strasse, field-hausnummer, field-plz, field-ort). Bei jeder Aktualisierung der einzelnen Adress-Felder sollte das neue Feld ebenfalls aktualisiert werden.

Meine Lösung: Rules verwenden.

Die Rule sollte wie folgt aufgebaut sein:

  • Event -> Vor dem Speichern eines Inhalts vom Typ XYZ
  • Bedingungen -> Keine
  • Aktionen -> Einen Wert setzen. Im Klartext:  Das Feld auswählen dessen Wert geändert werden soll (field-google-map-adresse) und den neuen Wert für dieses Feld festlegen (Tokens für field-strasse, field-hausnummer, field-plz, field-ort einsetzen).

Hier die gesamte Rule als Export:

{ "rules_google_map_adresse" : {
    "LABEL" : "Google Map Adresse",
    "PLUGIN" : "reaction rule",
    "OWNER" : "rules",
    "REQUIRES" : [ "rules" ],
    "ON" : { "node_presave--INHALTSTYP" : { "bundle" : "INHALTSTYP" } },
    "DO" : [
      { "data_set" : {
          "data" : [ "node:field-google-map-adresse" ],
          "value" : "[node:field-strasse] [node:field-hausnummer], [node:field-plz] [node:field-ort]"
        }
      }
    ]
  }
}

 

Neuen Kommentar hinzufügen