Manchmal wäre es doch schön, Blogbeiträgen Landkarte beizufügen, um den Artikel entsprechend zu "lokalisieren". Mit der Map Image API geht das sehr einfach. Der Vorteil dieser API: Es wird ein GIF oder PNG (je nach Wunsch) generiert, daher bleibt langsames JavaScript Aussen vor. Notwenig ist lediglich eine serverseitige Scriptsprache wie PHP. Wie simple dies beispielsweise im Zusammenspiel mit Textpattern ist, werden wir gleich sehen.
Die Karte wird mit ein paar wenigen Zeilen Code abgeholt:
<?php
$request =
'http://local.yahooapis.com/MapsService/V1/mapImage?appid=XYZ&location=Sunnyvale&&output=php';
$response = file_get_contents($request);
if ($response === false) {
die('Request failed');
}
$phpobj = unserialize($response);
echo '<img src="'.$phpobj["Result"].'">';
?>
Verändert werden muss zu diesem Stück Code eigentlich nur die Abfolge von Parametern innerhalb der Request-URL. Wie die Parameter aussehen bzw. welche Werte diese annehmen können, findet man bei
Yahoo. Dort kann man sich auch gleich eine App ID abholen, ohne die keine Abfragen möglich sind. Übrigens können 50.000 Abfragen pro Tag und IP kostenfrei getätigt werden. Das sollte selbst für besucherstarke Blogs völlig ausreichend sein.
Um die Karten dynamisch zu generieren, bietet sich bei Textpattern die Verwendung der Custom Fields (Benutzerdefinierte Felder) an. Diese muss man erst aktivieren, in dem man ihnen einen Namen zuweist. In der Administration von Textpattern findet man diese unter "Einstellungen / Erweiterte Einstellungen". Mehr ist nicht zu tun als bei "Name des benutzerdefinierten Feldes" zwei eindeutige Namen einzutragen. Bei jungfräulichen Textpattern-Installationen sind Feld1 und Feld2 mit Standartwerten custom1 bzw. custom2 belegt. Diese darf man getrost überschreiben. Für das nachfolgende Beispiel habe ich map_location und map_zoom als Namen gewählt. Nachdem die Namen eingetragen wurden, bitte das Speichern nicht vergessen.
Die Felder map_location und map_zoom tauchen nun unter "Inhalte / Verfassen" bzw. "Inhalte / Artikel" in der linken Spalte auf. Unter map_location werden wir den Ort, unter map_zoom einen Wert zwischen 1 und 12 für den Zoomfaktor eintragen. Bei Textpattern können wir diese Werte über den Tag txp:custom_field abholen.
Damit wir nicht jedesmal einen wust an Code in den Beitragstext oder den Quellcode einfügen müssen, legen wir unter "Präsentation / Bausteine" einen wiederverwertbaren Baustein mit Namen "form_map" an. Dieser Name ist frei wählbar und heisst nur im nachfolgenden Beispiel so. In den Baustein kopieren wir den obigen PHP-Code und nehmen folgende Änderung vor, die nur die Request-URL betreffen:
- Hinter "appid=" das "XYZ" durch die eigene App ID ersetzen
- Vor dem '; hängen wir noch zwei Parameter für die Größe der Karte an, beispielsweise "&image_height=200&image_width=400", wobei die beiden Größenangabe passend zu wählen sind
- Bei der Ortsangabe "location=Sunnyvale" ersetzen wir das Sunnyvale durch den Wert aus unserem custom_field, in dem wir den TXP-Tag <txp_custom_field name="map_location" /> einfügen.
- Um die Kartengenauigkeit dynamisch regeln zu kennen, lesen wir das zweite custom_field aus und hängen diesen Parameter vor dem '; an: &zoom=<txp:custom_field name="map_zoom" />
Nun speichern wir diesen Baustein ab und können diesen ab sofort überall (andere Bausteine, Seitenvorlagen oder Artikel) verwenden, indem wir den Tag <txp:output_form form="form_head" /> einfügen. Damit das PHP im Baustein auch ausgeführt werden kann, müssen die Einstellungen dazu unter "Administration / Einstellungen / Erweiterte Einstellungen" im letzten Block unter "Veröffentlichen" vorgenommen werden.
Ein Anwendungsbeispiel wäre meine Microsite zum Reschensee im Obervinschgau.