[Anleitung] PHP + Google CDN + jQuery + Google Maps API + Smarty in CMS-Seiten einbinden

Hier eine kleine Anleitung wie man Google Maps in CMS-Seiten auf [I]unaufdringliche[/I] Weise einbindet.

  1. neue [B]CMS-Seite[/B] anlegen auf der Karte erscheinen soll. Die Variable SHOW_GMAP sorgt dann dafür, dass die Google Maps API nur auf dieser Seite eingebunden wird.

[{ assign var="SHOW_GMAP" value="true" }]
<div id="map"></div>

  1. [B]_footer.tpl[/B] anpassen (weiter unten), inkl. der Abfrage der Variable aus der CMS-Seite.

...
<?php
$sDomain = $_SERVER[ 'HTTP_HOST' ];
switch ( $sDomain ) {
	/* Key für localhost Entwicklung */
	case ( 'localhost/oxid' ) :
		$sKey = 'GOOGLE_MAPS_KEY';
		$sLang = 'de';
		break;
	/* Key für Live Server */
	case ( 'www.meine-domain.de' ) :
		$sKey = 'GOOGLE_MAPS_KEY';
		$sLang = 'de';
		break;
}
/* Google API einbinden */
if ( $sKey ) {
	echo '<script type="text/javascript" src="http://www.google.com/jsapi?key=' . $sKey . '"></script>';
}
?>

<script type="text/javascript">
	google.load('jquery', '1.3.2');
	[{if isset($SHOW_GMAP)}]google.load('maps', '2', {'language' : '<?php echo $sLang; ?>'});[{/if}]
</script>
<script type="text/javascript" src="[{ $oViewConf->getResourceUrl() }]js/meine-js-funktionen.js"></script>
...
</body>

  1. [B]meine-js-funktionen.js[/B] anpassen.

var MEINNAMESPACE = {
	init: function() {
		MEINNAMESPACE.initGMap();
	}, /* END init() */
	
	map: '',
	initGMap: function() {
		if (document.getElementById('map')) {
			if (typeof GBrowserIsCompatible !== 'undefined' && GBrowserIsCompatible()) {
				MEINNAMESPACE.map = new google.maps.Map2(document.getElementById('map'));
				/* Karte ausrichten (Frankfurt am Main) */
				var centerView = new GLatLng(50.1115118, 8.6805059);
				MEINNAMESPACE.map.setCenter(centerView, 13);

				/* Karten Controlls hinzufügen */
				MEINNAMESPACE.map.addControl(new GLargeMapControl3D());
				MEINNAMESPACE.map.addControl(new GMapTypeControl());
				
				/* Kartentyp festlegen */
				MEINNAMESPACE.map.setMapType(G_NORMAL_MAP);

				/* Grösse des Infow Fenster überprüfen sobald Info Window geöffnet wird */
				MEINNAMESPACE.map.checkResize();
			}
			else {
				alert('Achtung! Die Google Maps API ist mit diesem Browser nicht kompatibel!');
			}
		}
		
		/* Marker erstellen (Funktion) */
		function createMarker(gm_point, gm_html) {
			var html = gm_html;
			var marker = new GMarker(gm_point, {
				title: 'Mein Tooltip'
			});
			
			/* Google Maps Info Window Options */
			GEvent.addListener(marker, 'click', function() {
				marker.openInfoWindowHtml(html, { maxWidth: '275' } );
			});
			return marker;
		} /* END createMarker() */
		
		/* Marker erstellen (Frankfurt am Main) */
		var gm_point = new GLatLng(50.1115118, 8.6805059);
		/**
		 * hier inline CSS verwenden, da Google Maps die Grösse des Fensters vor dem ausliefern
		 * berechnet und somit nachträgliches anpassen per CSS die Grösse des Fensters NICHT ändert!
		 */
		var gm_html = '<div style="font-size: 12px;"><strong>z.B. Meine Adresse</strong><br />'
			+ 'usw.'
			+ '<strong>usw.</strong></div>';
		var marker = createMarker(gm_point, gm_html);
		
		/* Marker auf Karte setzen */
		MEINNAMESPACE.map.addOverlay(marker);
	} /* END initGMap */
}

/* DOM Ready */
$(document).ready(function() {
	MEINNAMESPACE.init();
});

/* Google Maps Unload */
$(document.body).unload(function() {
	if (GBrowserIsCompatible()) {
		GUnload();
	}
});

Hoffe es hat euch gefallen. Viel Spass beim probieren.

Fragen / Anmerkungen:
[1] Gibt es eine Möglichkeit die Switch Case PHP auch als Smarty umzusetzen? Habe mit Smarty noch recht wenig Erfahrung.
[2] Kommentare, konstruktive Kritik, Verbesserungsvorschläge, immer her damit :slight_smile:

Gruss
Eddie

Hallo Eddie,

Hoffe es hat euch gefallen. Viel Spass beim probieren.

Auf alle Fälle! Input dieser Art wird immer gern gesehen :slight_smile:

Kennst Du übrigens die Tutorials auf der OXIDforge? Hier könntest Du solche Anleitungen direkt in der Wiki hinterlegen und im Forum einfach darauf verweisen.

Gruß

Ok, hab da jetzt mal den gleichen Beitrag eingestellt. Hoffe alles recht so (mein erste Wiki Eintrag *gg).