-
Wie schaut es denn mit der Einbindung des Moduls dlh_googlemap für eine aktive Einwilligung aus? Mit ca. 37.000 Einbindungen ist das Modul vermutlich DIE Lösung für die Einbindung einer Google Karte in Contao. Ist in Zukunft etwas geplant um die Einwilligung über eure Cookiebar abzubilden? Der Knackpunkt ist, dass die dlh_googlemap eigene Cookies zur Einwilligung mit sich bringt. Im Idealfall wäre es wünschenswert in der Cookiebar eine Auswahl treffen zu können, die sich auch auf diese Erweiterung auswirkt. Habt ihr dazu was auf dem Zettel? |
Beta Was this translation helpful? Give feedback.
Replies: 14 comments
-
Hallo @githuppi, wie genau findet hier die Initialisierung der Map statt? if(cookiebar.issetCookie(cookieId)){
// Initialisierung
} Grundsätzlich wollen wir mit unseren JS-Methoden so gut wie alles Kompatibel machen können. Sollte hier noch etwas benötigt werden, würde wir versuchen dies nachzureichen. Geplant ist auf jedenfall, dass wir eine weitere Methode bereitstellen, welche quasi eine Callback-Methode triggert um Skripte erst zu initialisieren, wenn die entsprechenden Cookies akzeptiert wurden.
Was genau für Cookies sind das? Von Google oder verwendet die Erweiterung Cookies? |
Beta Was this translation helpful? Give feedback.
-
Habe gerade mal rein geschaut. Schau mal ob du diese Zeilen entsprechend anpassen kannst. |
Beta Was this translation helpful? Give feedback.
-
@doishub besten Dank für die schnelle Rückmeldung ich schaue mir das an. |
Beta Was this translation helpful? Give feedback.
-
Prinzipiell müsste der Cookie von der Erweiterung dlh_googlemap gesetzt werden: Ist das mittels Befehl über eigene Scripte möglich? |
Beta Was this translation helpful? Give feedback.
-
Wie genau hast du die Abfrage integriert / versucht auf den Cookie zu prüfen? if(cookiebar.issetCookie(cookieId)){
if(window.addEvent) {
window.addEvent('domready', function() {
gmap<?= $this->map['id']; ?>_initialize();
});
} else if(typeof jQuery == "function") {
jQuery(document).ready(function(){
gmap<?= $this->map['id']; ?>_initialize();
});
} else {
window.setTimeout("gmap<?= $this->map['id']; ?>_initialize()", 500);
}
} Ich denke du wirst es bereits geändert haben aber zur Sicherheit, Über eigene Skripte könnte man die Initialisierung abbilden, jedoch scheint die Erweiterung die Karte mittels Das Skript könnte in etwa so aussehen: if (typeof meineNeueFunktion === "function") {
meineNeueFunktion();
} Anpassungen im Template: function meineNeueFunktion(){
if(window.addEvent) {
window.addEvent('domready', function() {
gmap<?= $this->map['id']; ?>_initialize();
});
} else if(typeof jQuery == "function") {
jQuery(document).ready(function(){
gmap<?= $this->map['id']; ?>_initialize();
});
} else {
window.setTimeout("gmap<?= $this->map['id']; ?>_initialize()", 500);
}
} Grundsätzlich soll dieses Verhalten zukünftig die oben erwähnte Methode abbilden, aber vielleicht hilft es bis ich diese implementiert habe. Code ist ungetestet ;) |
Beta Was this translation helpful? Give feedback.
-
Okay ich habe das so in das Template dlh_googlemap gesetzt. Und ja, es funktioniert. Ist der Cookie gesetzt wird nach einem neuen Laden der Seite die Karte angezeigt. Besteht die Möglichkeit, dass der Aufruf der Karte direkt nach der Bestätigung klappt? |
Beta Was this translation helpful? Give feedback.
-
Super, ja die Möglichkeit möchte ich mit der oben genannten Methode realisieren. So wird der Aufruf / die Initialisierung an die Methode geknüpft und automatisch ohne Reload geladen/ausgeführt. Ich schaue mal ob ich noch etwas Zeit finde um die Methode im Laufe der Woche nachzureichen. |
Beta Was this translation helpful? Give feedback.
-
Die Methode steht nun ab Version In deinem Fall müsste die Initialisierung in etwa so aussehen: -if(cookiebar.issetCookie(cookieId)){
- if(window.addEvent) {
- window.addEvent('domready', function() {
- gmap<?= $this->map['id']; ?>_initialize();
- });
- } else if(typeof jQuery == "function") {
- jQuery(document).ready(function(){
- gmap<?= $this->map['id']; ?>_initialize();
- });
- } else {
- window.setTimeout("gmap<?= $this->map['id']; ?>_initialize()", 500);
- }
-} document.addEventListener("DOMContentLoaded", function() {
cookiebar.addModule(cookieIdOfGoogleMaps, gmap<?= $this->map['id']; ?>_initialize);
}); Bei Bedarf kannst du auch hier eine Nachricht + Button zum akzeptieren ausgeben lassen, siehe Dokumentation. Code ist ungetestet ;) |
Beta Was this translation helpful? Give feedback.
-
In einer der dlh-Erweiterungen wird im Template die API über folgende Zeile im HEAD platziert: $GLOBALS['TL_JAVASCRIPT'][] = 'https://maps.googleapis.com/maps/api/js?key=' . $this->map['key'] . '&language=' . $this->map['language']; Diese müsste aus kommentiert und erst geladen werden, sofern der Cookie akzeptiert wurde: - $GLOBALS['TL_JAVASCRIPT'][] = 'https://maps.googleapis.com/maps/api/js?key=' . $this->map['key'] . '&language=' . $this->map['language']; Initialisieren der Karte mit Berücksichtigung der akzeptierten Services: - if(cookiebar.issetCookie(cookieId)){
- if(window.addEvent) {
- window.addEvent('domready', function() {
- gmap<?= $this->map['id']; ?>_initialize();
- });
- } else if(typeof jQuery == "function") {
- jQuery(document).ready(function(){
- gmap<?= $this->map['id']; ?>_initialize();
- });
- } else {
- window.setTimeout("gmap<?= $this->map['id']; ?>_initialize()", 500);
- }
- }
+ document.addEventListener("DOMContentLoaded", function() {
+ cookiebar.addModule(YOUR_GOOGLE_MAPS_COOKIE_TOKEN_ID, function(){
+
+ let script = document.createElement('script');
+ script.type = 'text/javascript';
+
+ script.onload = function() {
+ gmap<?= $this->map['id']; ?>_initialize();
+ };
+
+ script.src = 'https://maps.googleapis.com/maps/api/js?key=<?=$this->map['key']?>&language=<?=$this->map['language']?>';
+ document.head.append(script);
+ }, {
+ selector: '#dlh_googlemap_<?= $this->map['id']; ?>',
+ message: 'YOUT_TEXT',
+ button: {
+ show: true,
+ text: 'YOUR_BUTTON_TEXT',
+ type: 'button',
+ classes: 'my-btn'
+ }
+ });
+ }); Vielen Dank für den Hinweis @operatorone. 😊 |
Beta Was this translation helpful? Give feedback.
-
Hey, danke für die hilfreichen Tipps, vor allem im letzten Beitrag. Allerdings funktioniert das scheinbar nicht mehr zu 100% mit Contao 4.13.35 und der Cookiebar Version 1.13.1 oder ich mache irgendetwas falsch. Die Karte an sich lädt und auch das Akzeptieren über die Cookiebar funktioniert. Aber es funktioniert nicht das nachträgliche Akzeptieren über den Button, wenn zuvor über die Cookiebar abgelehnt wurde. Es kommt folgende Fehlermeldung in der DevTool Console von Chrome:
Wenn ich dann in der JavaScript-Datei die Zeile 177 auskommentiere, dann funktioniert es (aber das kann ja nicht Sinn der Sache sein): Hat zufällig noch jemand einen Tipp? |
Beta Was this translation helpful? Give feedback.
-
Was für einen CookieType verwendest du um mit der addModule-Methode zu arbeiten? Sollte es ein einfacher "Hinweis" sein, versuche diesen mal auf "Benutzerdefiniert (Skript)" umzustellen. |
Beta Was this translation helpful? Give feedback.
-
Hi dishub, Ein Kollege hat mir geholfen, es lag daran, dass ich an der Stelle mit der ID bei YOUR_GOOGLE_MAPS_COOKIE_TOKEN_ID den Cookie-Token mit einfachen Anführungszeichen aus dem Backend eingetragen habe (also bspw. 'ga_map') und nicht die interne Contao ID, die man aus der Adresszeile des Browsers kopieren muss, in meinem Fall einfach eine 5. P.S. Ich hatte Iframe gewählt. Es geht aber beides, habe es ausprobiert. |
Beta Was this translation helpful? Give feedback.
-
Hey, ich hatte es schon mal korrekt eingerichtet, nur bin ich gerade zu blöd, um zwei Karten mit der Erweiterung dlh_googlemap und Cookiebar anzeigen zu lassen. Es wird immer nur eine ausgegeben.
|
Beta Was this translation helpful? Give feedback.
-
Mit den Templates hat das erstmal nichts zu tun, da du die |
Beta Was this translation helpful? Give feedback.
In einer der dlh-Erweiterungen wird im Template die API über folgende Zeile im HEAD platziert:
Diese müsste aus kommentiert und erst geladen werden, sofern der Cookie akzeptiert wurde:
- $GLOBALS['TL_JAVASCRIPT'][] = 'https://maps.googleapis.com/maps/api/js?key=' . $this->map['key'] . '&language=' . $this->map['language'];
Initialisieren der Karte mit Berücksichtigung der akzeptierten Services: