Hi Dylan,
alles klar. Das sind soweit gute Nachrichten. Gut das du auf auf php >5 umgestellt hast und simpleXML jetzt zur Verfügung steht. Die unterschiedlichen Größen der Dateien haben mich allerdings gewundert. Die Antworten des Google Servers können unterschiedlich lang sein. Bei unterschiedlichen Orten können also durchaus unterschiedlich lange Antworten herauskommen. Wenn die XML-Datei allerdings nur 8-Zeilen lang ist, konnte i.d.R. die Adresse nicht aufgelöst werden. Hast du zum Anfragen ein real exitierende(n) Anschrift oder Ort verwendet oder die Adresse aus "Musterstadt"?
Mit der Default-Einstellung des Cachings werden die XML-Daten etwa 10 Tage im Cache vorgehalten (oder der Cache wird manuell über das Admin gelöscht [nur wenn Plugin mit Default Cache-Verzeichnis läuft]). Wenn ich das System einrichte verwende ich den cache_time parameter {... cache_time=1 ...}.
Gerade wenn am Anfang was schief geht, kannst du so verhindern, das du 10 Tage die Ergebnisse vorhältst (oder einfach nach Änderungen den CMSMS Cache löschen).
Eine Map wird leider nicht ausgegeben, an Position der Map steht die URL:
http://maps.google.com/maps/geo?q=...&h ... output=xml
Das ist auch, was im Quelltext steht, - die URL. Die URL sollte wahrscheinlich irgendwo interpretiert werden, wäre das für mich sichtbar im Quelltext, z.B. per JavaScript, oder ..?
Damit meine ich die Ausgabe des Plugins. Im Quelltext des Plug-in steht noch ein ECHO in Zeile 9 des Geocoder Plug-ins. Das habe ich noch entfernt (siehe angehängte Datei).
Eine Map gibt das Plug-in nicht aus. Es nutzt lediglich die Geocoder Schnittstelle des Maps Moduls und stelle Geo-Daten zu der Adresse per Smarty zur Verfügung. So kannst du deine Maps selbst stylen und einrichten und fügst mit dem Plug-in nur noch die Koordinaten hinzu.
Um eine Map einzubinden, gibt es verschiedene Wege. Füge einfach den Metadaten der Seite auf der du die Map sehen willst folgenden Beispiel Maps-Code hinzu:
Code: Select all
{nh_essentials}
{nh_api_geocoder location="ADRESSE" api_key="YOUR_KEY"}
{literal}
<__script__ src="http://maps.google.com/maps?file=api&v=2&key=YOUR_KEY" type="text/javascript"></__script>
<__script__ type="text/javascript">
function initialize() {
if (GBrowserIsCompatible()) {
var map = new GMap2(document.getElementById("map_canvas"));
map.setCenter(new GLatLng({/literal}{$geoinfo[0]->gps->comma_string}{literal}), 7);
var opts = { text : "Hello World"};
var marker = new PopupMarker(new GLatLng({/literal}{$geoinfo[0]->gps->comma_string}{literal}), opts);
map.addOverlay(marker);
}
}
</__script>
{/literal}
Um die Funktion nun beim Seitenaufruf zu anzuschieben musst diese Funktion per onload="initialize()" des Body-Tags aufgerufen werden.
Dazu gibt es zwei Wege, entweder, du baust ein eigenes Template für Seiten mit Map Darstellung oder du fügst deinem Basis Template eine Option zu, den Body tag im Bedarf zu erweitern.
Dort wo in deinem Template der
anfängt, tausch du dies gegen
Jetzt kannst du zu den Seiten bei Bedarf beim Bearbeiten in das Feld "html_body_extension" einfach
onload="initialize()" eintragen und die Map aus den Page-Metadaten würde geladen werden.
Als letztes musst du die Map im Content einbauen. Dazu reicht es
dort einzustellen, wo du die Map hinhaben möchtest.
Jetzt müsstest du nach Seitenaufruf über das Frontend eine Map mit Marker an der richtigen Position sehen.
Wenn du jetzt öfters eine Map einbinden willst, empfehle ich dir ein eigenes Template zu bauen. Du kannst ja einfach dein normales Content-Template kopieren. Dann bauen wir ncoh ein wenig Smarty herum, so dass die API Anfragen und das JS nur da sind, wenn du in einem zusätzlichen Feld eine Adresse beim Seitenbearbeiten eingestellt hast.
1) Im Bereich des Templates folgenden Smarty-Code zum Template hinzufügen
Code: Select all
{content block="adresse" assign="var_adresse" oneline=true}
{if $var_adresse != ''}
{nh_essentials}
{nh_api_geocoder location="ADRESSE" api_key="YOUR_KEY"}
{literal}
<__script__ src="http://maps.google.com/maps?file=api&v=2&key=YOUR_KEY" type="text/javascript"></__script>
<__script__ type="text/javascript">
function initialize() {
if (GBrowserIsCompatible()) {
var map = new GMap2(document.getElementById("map_canvas"));
map.setCenter(new GLatLng({/literal}{$geoinfo[0]->gps->comma_string}{literal}), 7);
var opts = { text : "Hello World"};
var marker = new PopupMarker(new GLatLng({/literal}{$geoinfo[0]->gps->comma_string}{literal}), opts);
map.addOverlay(marker);
}
}
</__script>
{/literal}
{/if}
2) Tag im Falle einer Adresse zum Map-Laden bewegen
Austausch von
gegen
Code: Select all
</__body{if $var_adresse != ''} onLoad="initialize()" onunload="GUnload()"{/if}>
3) Anwendung
Erstelle eine neue Seite mit dem modifizierten Template (oder ändere das Template einer Seite zu dem neuen Template).
Jetzt müsstest du ein neues Feld "Adresse" sehen. Wird dieses ausgefüllt, muss man im Content einfach an gewünschter Stelle die Map einsetzen
. Dies sind dann die einzigen beiden Aktionen die später redaktionell bearbeitet werden müssen (Adresse und Map-DIV setzen). Jetzt hast du eine komfortablere Map-Einbindung wenn du öfters auf verschiedenen Seiten verschiedene Orte angeben möchtest.
Wenn du ein anderes Map-Design oder andere Controls, Zoomstufen oder was auch immer möchtest, kannst du dein JS nach deinen Wünschen anpassen.
http://code.google.com/intl/de/apis/map ... ction.html
Unter der URL gibt es eine gute deutschsprachige Erläuterung zum Einstieg in Googe Maps für Heimwerker

dort findest du auch noch viele Beispiele.
Hoffe die Erläuterungen helfen dir und anderen potentiellen Nutzern das Google Geocoder API Plugin besser zu verstehen.
Teste bitte nochmal ob die angehängte Version bei dir nun gut läuft, ich werde dann eine neue Version öffentlich einstellen.
Beste Grüße
Nils