[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
Google Maps Modul - gclientgeocoder is undefined - REDAXO Forum
Hallo,

Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.

Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
Benutzeravatar
rkemmere
Beiträge: 486
Registriert: 6. Feb 2007, 17:47
Kontaktdaten: Website

Google Maps Modul - gclientgeocoder is undefined

20. Sep 2007, 09:56

Hallo zusammen,

da ich eben bei 3 Projekten das Problem hatte das die Karte, die mit dem Google Maps Modul generiert wird nicht angezeigt werden konnte und immer mit dem Fehler "gclientgeocoder is undefined" beendet wurde, habe ich mich mal schlau gemacht.

Es liegt wohl daran das dass Google Maps Modul http://www.redaxo.de/165-Moduldetails.h ... ule_id=132 für die Version 2 der API erstellt wurde. Aktuell ist Google bei der V2.89. Bei dieser Version scheint der Geocoder nicht mehr zu funktionieren.

Man muss dem Modul explizit sagen das die Version 2 genommen werden soll.

Alt:

Code: Alles auswählen

src="http://maps.google.com/maps?file=api&v=2&key=ABCD" type="text/javascript"
Neu ist nun, das es eine "Stabile API Version" gibt, die alle paar Wochen ein Update mit ausführlich getesteten Änderungen erhält. Auf diese Weise kann man sicherer sein, das die Funktionen der eigenen Google Map nicht durch API Änderungen beeinträchtigt werden.
Dazu wird api&v=2 zu api&=v2.s geändert und das sieht komplett so aus:

Code: Alles auswählen

src="http://maps.google.com/maps?file=api&v=2.s&key=ABCD" type="text/javascript"
Das Ausgabe Modul muss dann wie folgt aussehen:

Code: Alles auswählen

<script type="text/javascript" src="http://maps.google.com/maps?file=api&v=2.s&key=REX_VALUE[4]"></script>
<div style="display: block; width: 100%; height: 300px; visibility: hidden;" id="map"></div>
<script type="text/javascript">
	function showAddress(address, text, zoom)
	{
		var div = document.getElementById("map");
		var geocoder = new GClientGeocoder();
		var map = new GMap2(div);
		map.addControl(new GLargeMapControl());
		geocoder.getLatLng(address,
			function(point)
			{
				if (!point)
				{
					div.style.visibility = 'hidden';
					alert(address + " nicht gefunden");
				}
				else
				{
					map.setCenter(point, zoom);
					var marker = new GMarker(point);
					GEvent.addListener(marker, "mouseover", function()
					{
						marker.openInfoWindowHtml(text);
					});
					GEvent.addListener(marker, "mouseout", function()
					{
						map.disableInfoWindow();
						map.enableInfoWindow();
					});
					map.addOverlay(marker);
					marker.openInfoWindowHtml(text);
					window.setTimeout(function()
					{
						map.disableInfoWindow();
						map.enableInfoWindow();
					}, 4000);
				}
			}
		);
		div.style.visibility = 'visible';
	}
<?php
echo 'showAddress(\'REX_VALUE[1]\', \''.html_entity_decode('REX_VALUE[2]').'\', REX_VALUE[3]);';
?>
</script>
2 Kleine Zeichen aber eine Große Wirkung.

Gruß
Ronny

melody
Beiträge: 70
Registriert: 17. Sep 2007, 08:49

23. Sep 2007, 03:17

Hallo Ronny,

danke für den Hinweis!

Ich habe auch 2 kleine Tipps :)

1. JavaScript-Code per JavaScript-Kommentare verstecken (XHTML)
selfHTML hat geschrieben: Erläuterung:
Der "CDATA"-Abschnitt beginnt mit <![CDATA[ und endet mit ]]>. Ohne diese Umklammerung würde ein XML-Parser das <-Zeichen innerhalb des Scripts als Fehler ankreiden. Damit der Browser die Anfang- und Endmarkierung des CDATA-Abschnitts nicht als JavaScript-Code zu interpretieren versucht, werden sie durch JavaScript-Kommentare vor ihm versteckt.
2. Mit der Google Map Api ist es möglich den Doppelklick der linken Maustaste als Center und Zoom Anweisung zu nutzen:

http://googlemapsapi.blogspot.com/2006/ ... oooom.html

map.enableDoubleClickZoom();
map.enableContinuousZoom();

und hier ist die komplette Ausgabe:

Code: Alles auswählen

<script type="text/javascript" src="http://maps.google.com/maps?file=api&v=2.s&key=REX_VALUE[4]"></script> 
<div style="display: block; width: 100%; height: 500px; visibility: hidden;" id="map"></div> 
<script type="text/javascript"> 
//<![CDATA[
   function showAddress(address, text, zoom) 
   { 
      var div = document.getElementById("map"); 
      var geocoder = new GClientGeocoder(); 
      var map = new GMap2(div); 
      map.addControl(new GLargeMapControl()); 
      geocoder.getLatLng(address, 

         function(point) 
         { 
            if (!point) 
            { 
               div.style.visibility = 'hidden'; 
               alert(address + " nicht gefunden"); 
            } 
            else 
            { 
               map.setCenter(point, zoom); 
               var marker = new GMarker(point); 

               map.enableDoubleClickZoom();
               map.enableContinuousZoom();

               GEvent.addListener(marker, "mouseover", function() 
               { 
                  marker.openInfoWindowHtml(text); 
               }); 
               GEvent.addListener(marker, "mouseout", function() 
               { 
                  map.disableInfoWindow(); 
                  map.enableInfoWindow(); 
               }); 
               map.addOverlay(marker); 
               marker.openInfoWindowHtml(text); 
               window.setTimeout(function() 
               { 
                  map.disableInfoWindow(); 
                  map.enableInfoWindow(); 
               }, 4000); 
            } 
         } 
      ); 
      div.style.visibility = 'visible'; 
   } 
<?php echo 'showAddress(\'REX_VALUE[1]\', \''.html_entity_decode('REX_VALUE[2]').'\', REX_VALUE[3]);'; ?> 
//]]>
</script>
Gruß, Melody

Zurück zu „Allgemeines [R3]“