Codeschnipsel für Cataloglister + Infobox - Frage zu unterschiedliche Marker
Hallo zusammen,
hab ein bisschen rumprobiert und poste hier mal mein Ergebnis. Als Pixelschubser hab ich im Code nicht so die Erfahrung deshalb meine Bitte: Kann sich das von den erfahrenen Leuten mal jemand anschauen - funktionieren tut's zumindest:
Mit folgendem Code lässt sich im Listermodul neben der bloßen Markierung auch die Infobox zum jeweiligen Punkt öffnen:
Code:
<script type="text/javascript">
//<![CDATA[
<?php if (count($this->entries)): ?>
<?php $i = 0; ?>
function gmap1_dynmap(gmap1) {
<?php foreach ($this->entries as $entry): ?>
var myLatlng_<?php echo $i; ?> = new google.maps.LatLng(<?php echo $entry['data']['googlemap']['value']; ?>);
var gmap1_<?php echo $i; ?>_marker = new google.maps.Marker({
position: new google.maps.LatLng(<?php echo $entry['data']['googlemap']['value']; ?>),
map: gmap1
});
var gmap1_<?php echo $i; ?>_infowindow = new google.maps.InfoWindow({
content: '<?php echo $entry['data']['name']['value']; ?></br><?php echo $entry['data']['picture']['value']; ?></br><?php echo $entry['data']['int_link']['value']; ?>',
});
google.maps.event.addListener(gmap1_<?php echo $i; ?>_marker, 'click', function() {
gmap1_<?php echo $i; ?>_infowindow.open(gmap1,gmap1_<?php echo $i; ?>_marker);
});
<?php $i++; ?>
<?php endforeach; ?>
}
<?php endif; ?>
//]]>
</script>
Nun meine Frage: kann ich über dieses Template auch für verschiedene Kategorien unterschiedliche Marker anzeigen lassen? (z.B. Museen / Gastronomie / Einkaufsmöglichkeiten etc.)
Gruß
Hauge
Maximale Einträge > Begrenzung?
Hallo zusammen,
ich arbeite aktuell wieder an der Thematik und habe wie oben bereits beschrieben einige Einträge aus dem Catalog mit dem Listermodul in die googlemap integriert.
Aktuell stehe ich vor dem Problem, dass ich bei mehr als 62 Katalogeinträgen keine Anzeige mehr erhalte.
Ich habe mehrere Varianten getestet und aktuell das Limit des Listers auf 62 Einträge eingestellt. Ab 63 Einträgen erhalte ich keine Einträge mehr.
Es macht zwar wenig Sinn, zu viele Einträge auf einer Seite anzeigen zu lassen, ich habe jedoch vor, verschiedene Filter in eine Gesamtübersicht der Einträge einzubauen und dann kann es ggf. ab und an zu mehr als 62 Einträgen kommen. Der User hat dann aber eine leere map vor sich und erhält erst nach der Filterung entsprechende Anzeigen in der Map. Da es sich um ca. 1000 Einträge handelt kann es sein, dass er mehrmals filtern muss bevor er eine Anzeige erhält...
Meine Frage(n): gibt es da von Haus aus ein Limit oder kann das Problem auch Serverseitig sein?
Das bringt mich noch auf eine Idee: kann ich ggf. auch pro Zoom-Ebene unterschiedliche Einträge anzeigen lassen >>> Zeige pro Zoomebene maximal 50 Einträge >>> Lister mit Bedingung >>> die "wichtigsten" immer anzeigen usw.
Catalog & Google Maps verknüpfen > Hinweis für IE6 und IE7
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
Geo-Koordinaten aus Adresse, Catalog 2 Map
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:
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; ?>
Man beachte:
- Ü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 :)