Servus,
möchte an dieser Stelle noch einen wichtigen Hinweis bezüglich der Verwendung unter IE6 und IE7 von cubano posten:
Verwendung von catalog & google maps unter IE6 und IE7
Druckbare Version
Servus,
möchte an dieser Stelle noch einen wichtigen Hinweis bezüglich der Verwendung unter IE6 und IE7 von cubano posten:
Verwendung von catalog & google maps unter IE6 und IE7
Hi,
das ganze ist gar nicht so aufwendig:
Für einen Auftrag ging es auch darum ein Händlerverzeichnis abzubilden und mit googlemaps zu verknüpfen.
Das ganze Template brauch man gar nicht zu posten, hier der wichtigste Auszug zur Erstellung der Karte (oben einfügen) und die Variablen durch Eure Felder ersetzen.
Eine Info-Grafik wird gleich mit erstellt.
Die Id ist hier zum Test gerade fix. Die könnte natürlich noch für jede Katalog-Liste dynamisch gesetzt werden.
PHP-Code:
<?php if (count($this->entries)): ?>
<?php
$coords = $this->entries[0]['data']['geocoords']['value'];
$title = $this->entries[0]['data']['name']['value'];
$street = $this->entries[0]['data']['street']['value'];
$zip = $this->entries[0]['data']['zip']['value'];
$city = $this->entries[0]['data']['city']['value'];
$id = 3;
?>
<script type="text/javascript">
//<![CDATA[
// Google Maps Integration
function gmap<?php echo $id; ?>_dynmap(gmap<?php echo $id; ?>) {
// Center map
gmap<?php echo $id; ?>.center = new google.maps.LatLng(<?php echo $coords; ?>);
// Zoom
gmap<?php echo $id; ?>.zoom = 15;
gmap<?php echo $id; ?>.mapTypeId=google.maps.MapTypeId.ROADMAP;
// Set marker
var gmap<?php echo $id; ?>_marker = new google.maps.Marker({
position: new google.maps.LatLng(<?php echo $coords; ?>),
map: gmap3
});
var gmap<?php echo $id; ?>_infowindow = new google.maps.InfoWindow({
options: {},
content: '<div class="infoWindow">' +
'<p class="title"><b><?php echo $title; ?></b><p>' + "" +
'<?php echo $street; ?>' + "<br />" +
'<?php echo $zip; ?>' + ", " + '<?php echo $city; ?>' +
'</div>'
});
google.maps.event.addListener(gmap<?php echo $id; ?>_marker, 'click', function() {
gmap<?php echo $id; ?>_infowindow.open(gmap<?php echo $id; ?>,gmap<?php echo $id; ?>_marker);
});
}
//]]>
</script>
Grüße,
Tim
Danke für Eure Hilfe. Ich probier's gleich mal...
@hauge
Herzlichen Dank für Deine Hilfe.
Der Grund war schlussendlich das fehlende UTF-8 Format und 2 Hochkommas in den Adressen... :-(
Jedenfalls werden jetzt die Marker korrekt angezeigt.
@ Allgemein
Gibt es einen Weg um Sonderzeichen z.B. Hochkommas abzufangen resp. ignoreren zu können, damit man nicht jede CSV-Datei vor dem Import durchackern müsste?
Innerhalb von contao kannst duPHP-Code:
@ Allgemein
Gibt es einen Weg um Sonderzeichen z.B. Hochkommas abzufangen resp. ignoreren zu können, damit man nicht jede CSV-Datei vor dem Import durchackern müsste?
nutzenPHP-Code:
standardize($strMeinString);
Hallo Leute,
da ich neu hier bin bitte nicht sofort auf mich drauf hauen :)
um eine map wie auf http://schanzenport.de/ zu realiesieren verwende ich da auch am besten den catalog in verbindung mit dem google maps mdoul?
oder wird das komplizierter??
vielen dank!
könnte auch ohne catalog mit einem angepassten dhe_googlemaps funktionieren.....
Hi,
das sollte mit dem Catalog und dem Mapsmodul gehen. Ohne Catalog geht auch, aber wenn Du eine solche Filterung haben möchtest, ist es mit einfacher.
Grüße,
Christian
Mein Lösungsansatz ist (im Detail) noch etwas anders und wer weiß, vielleicht hilft es dem einen oder anderen:
Ausgangssituation
- Adressdaten in Katalog.
- Diese sollen in einer Katalog-Detailansicht auf einer Map ausgegeben werden. Hier: Eine Map auf einer Katalogleser-Seite, mit einem Zentrum und einem Pin.
- Ich habe aber keine Lust die Geo-Koordinaten von Hand zu ermitteln und jeweils in den Katalogeinträgen zu hinterlegen.
- Gleichzeitig soll alles halbwegs sauber ineinander greifen.
To Do
- Eine Map ohne jeden Marker anlegen und auf diese in der Katalogleser-Seite verweisen.
- Neues Katalogleser-Template anlegen (Details siehe unten).
- Auf die Katalog-Adressdaten im Template zugreifen.
- Katalogleser-Modul einrichten, auf das erstellte Template verweisen.
- Fertig.
Für das Template hier meine Vorlage:
Man beachte:PHP-Code:
<?php if (count($this->entries)): ?>
<script type="text/javascript">
//<![CDATA[
function gmap1_dynmap(gmap1) {
var catalog_address = new Array();
<?php foreach ($this->entries as $entry): ?>
catalog_address.push('<?php echo $entry['data']['streetaddress']['value']; ?>, <?php echo $entry['data']['zipcode']['value']; ?> <?php echo $entry['data']['city']['value']; ?>');
<?php endforeach; ?>
var geocoder = new google.maps.Geocoder();
catalog2map_geocordsFromAddress();
function catalog2map_geocordsFromAddress() {
//var address = document.getElementById('address').value;
geocoder.geocode( { 'address': catalog_address[0]}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
catalog2map_setCenterAndMarker(results);
} else {
//alert('Hat nicht funktioniert weil: ' + status);
}
});
}
function catalog2map_setCenterAndMarker(results) {
//alert('moin:' + results[0].geometry.location);
gmap1.setCenter(results[0].geometry.location);
var marker = new google.maps.Marker({
map: gmap1,
position: results[0].geometry.location
});
}
}
//]]>
</script>
<?php endif; ?>
- Über "geocoder.geocode" lass ich Google aus den übergebenen Adressdaten die Geo-Koordinaten ermitteln. Hier entsteht die oben angesprochene Vereinfachung.
- Ich lasse ganz oben im Code, etwas kompliziert, das Template ein JS-Array aus den Adressdaten bauen, verwende dann aber nur den ersten Eintrag des Arrays. Dies deshalb, weil ich unbedingt sicher gehen will, dass definitiv nur der erste Adress-Wert verwendet wird - zwar ist mir schleierhaft, wie in einer Katalogleser-Seite zwei Datensätze gezeigt werden sollen, doch sicher ist sicher :)
prinzipell eine gute Idee...
nur bei shared hosting ist das mit der Adress-Anfrage (Limit 2.500 Anfragen /Tag) ein Problem, da ist oft schon nach ein paar Stunden das freie Kontigent der Adressanfragen erschöpft und damit kommt dann immer ein Quata-Fehler.... ;(
Die Anfrage geht in diesem Fall doch vom Server aus und da hier mehrere Server sich die IP Teilen.....
Prinzipiell aber ein sehr guter Ansatz, Nils! Vielleicht bringt mich das auf ein paar neue 'dumme Ideen' ;)
Grüße,
Christian