MetaModels + dlh_googlemaps Integration - wie lösen?
Hallo zusammen,
Bin hier am umsetzen einer Site mit contao 3.2.9 und MetaModels sowie dlh_googlemaps.
Da soll nun eine Google Karte mit Markern und eine Liste darunter angezeigt werden.
Nach einigem forsten im Internet ohne etwas Gutes zu finden wie man das umsetzen kann, habe ich mal begonnen.
Nun stecke ich fest - aber hier erst mal etwas Info:
Ich habe das Model erstellt mit den Attributen sowie BE + FE Rendereinstellungen.
Dann eine Karte und die Listenausgabe "FE Listenansicht". Soweit so gut.
Um die Marker auf die Karte zu bekommen, habe ich eine zusätzliche Rendereinstellung "FE Liste Kartenmarker" erstellt.
Diese gibt die Felder showmap (checkbox) und geocode (text) aus. Für das Feld geocode habe ich ein custom template "mm_attr_text_geocode_addmarker.html5" erstellt und im theme folder abgelegt.
Darin befindet sich folgender Inhalt:
Code:
<?
$hash = md5(serialize($this));
if($this->row["showmap"] == "1"){
?>
<script>
Hook.register(
'add_markers',
function ( args ) {
gmap = args[0];
var gmap_marker_<?= $hash ?> = new google.maps.Marker({
position: new google.maps.LatLng(<?php echo explode(",",$this->raw)[1]. ",". explode(",",$this->raw)[0] ?>),
map: gmap
});
var gmap_window_<?= $hash ?> = new google.maps.InfoWindow({
content: 'Mein Popuptext',
});
google.maps.event.addListener(gmap_marker_<?= $hash ?>, 'click', function() {
alert("click ;-)");
gmap_window_<?= $hash ?>.open(gmap,gmap_marker_<?= $hash ?>);
});
// return true to continue with the other functions registered with the same hook name
return true;
}
);
</script>
<? } ?>
Am Ende meiner fe_page ist folgender Code, der alles zusammenfasst:
Code:
<script>
// gmap1_dynmap gets called by dlh_googlemaps when map is ready
function gmap1_dynmap(gmap1) {
Hook.call( 'add_markers', [ gmap1 ] );
}
</script>
Die Marker werden erstellt, jedoch gibt es einige Probleme:
- Die Popup Meldung soll aus anderen Feldern des Models (z.B. Titel) erstellt werden, in diesem template habe ich jedoch keinen Zugriff auf die anderen Felder.
- Das showmap Feld wird ausgegeben, dafür habe ich ein mm_attr_checkbox_noooutput.html5 erstellt, welches leer ist.
Dieses dem showmap Feld im "FE Liste Kartenmarker" zugeweisen. Trotzdem wird der Wert 1 ausgegeben.
Ich frage mich ob ich überhaupt den richtigen Weg gewählt habe.
Leider findet sich fast keine Information zu diesem Thema.
Und das ist meine erste Begegnung mit MM..
Kann mich da jemand in die richtige Richtung weisen?
Wäre echt dankbar.
Fehlermeldung bei ContaoMaps
Ich versuche auch das ContaoMaps mit MM zum laufen zu bringen, jedoch gibt mir ContaoMaps die Fehlermeldung system/modules/contaomaps/ContaoMap.php on line 39.
Auch wenn ich versuche keinen MetaModels-Layer in die Karte zu laden, also nur einen Layer mit manuell eingetragenen Markern kommt der Fehler.
Habe ich was vergessen oder ist das ein Kompatibilitätsproblem mit der Contao-Version (3.2.9) ?
Gelöst: clustering im Standardtemplate
Ohne viele Worte:
Code:
<?php if ($this->items->getCount()): ?>
<script>
function gmap1_dynmap(gmap1) {
var markers = [];
<?php
foreach($this->items->parseAll($this->getFormat(), $this->view) as $arrItem):
$name = htmlspecialchars($arrItem['text']['name'], ENT_QUOTES);
$url = $arrItem['raw']['url'];
$geolocation = $arrItem['raw']['geolocation'];
$address = preg_replace( "/\r|\n/", "<br>", $arrItem['text']['address']);
$id = $arrItem['raw']['id'];
$info = '<div class="gmap-infobox-tip"></div>';
$info .= '<div class="gmap-infobox-content">';
$info .= '<p class="name">' .$name .'</p>';
$info .= '<p><a target="_blank" href="' .$url .'">' .$url .'</a></p>';
$info .= '<p>' .$address .'</p>';
$info .= '</div>';
?>
// Create Marker
var gmap1_<?php echo $id; ?>_marker = new google.maps.Marker({
position: new google.maps.LatLng(<?php echo $geolocation; ?>),
map: gmap1,
title:"<?php echo $name; ?>",
icon: new google.maps.MarkerImage(
'files/blogger.png',
new google.maps.Size(20, 20),
new google.maps.Point(0,0),
new google.maps.Point(5,21)
),
});
markers.push(gmap1_<?php echo $id; ?>_marker);
// Create InfoBox
var gmap1_<?php echo $id; ?>_infobox1 = new InfoBox({
content: '<?php echo $info; ?>',
disableAutoPan: false,
maxWidth: 150,
boxClass: 'gmap-infobox',
pixelOffset: new google.maps.Size(-75, -5),
zIndex: null,
closeBoxMargin: '18px 8px 2px 2px',
closeBoxURL: 'http://www.google.com/intl/en_us/mapfiles/close.gif'
});
// Create Event Listener
google.maps.event.addListener(gmap1_<?php echo $id; ?>_marker, 'click', function() {
gmap1_<?php echo $id; ?>_infobox1.open(gmap1, this);
});
<?php endforeach; ?>
var markerCluster = new MarkerClusterer(gmap1, markers);
}
</script>
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Zitat von
alandgraf
ich habe alles nachgebaut. bei mir funktioniert das mit dem clustering nicht…
was mach ich falsch?
nehme ich das normale template, ohne cluster, zeigt er alle marker an…
beim cluster-template jedoch nicht...
also da ist jetzt die Information doch etwas dünn um Dir da helfen zu können.
Was hast Du genau nachgebaut?
Das hier?: http://pyropixel.de/articles.html
Das ist zunächst die Grundlage des Ganzen.
Folgend gebe da nochmals nen groben Umriss was alles beachtet werden sollte:
1. pyropixel.de/articles.html komplett nachbauen
2. folgendes unter "Zusätzliche <head>-Tags ins layout:
Code:
<script type="text/javascript" src="http://google-maps-utility-library-v3.googlecode.com/svn/trunk/infobox/src/infobox.js"></script>
<script src="http://google-maps-utility-library-v3.googlecode.com/svn/trunk/markerclusterer/src/markerclusterer_compiled.js" type="text/javascript">
Seite neu laden, um den Quelltext zu holen für: http://google-maps-utility-library-v3.googlecode.com/svn/trunk/markerclusterer/src/markerclusterer_compiled.js
</script>
3. Deine Liste sollte in etwa so aussehen:
Anhang 14147
4. metamodel_googlemapsmarker.html5 anpassen (darauf achten, dass die items in die korrekte Karte geladen werden)