So, ich habe mal rein geschaut und etwas gebastelt.
Dazu muss ich sagen, dass ich das Skript nicht getestet, sondern ausschließlich anhand der Gegebenheiten vorbereitet habe.
Als Basis wird folgendes Template verwendet:
https://github.com/Kuestenschmiede/M...c4g_maps.html5
In diesem Template befinden sich zwei Stellen, welche wir anpassen müssen.
a) Aufruf per Ajax
b) Direkter Aufruf
Für den Aufruf per Ajax (a), ersetzen wir folgend die Zeilen 17-19 durch folgenden Code:
Code:
cookiebar.addModule(YOUR_COOKIE_TYP_ID, function(){
window.mapData = window.mapData || {};
window.mapData<?php echo '['.$this->mapData['mapId'] . ']' ?> = <?php echo json_encode($this->mapData) ?>;
window.initMap(window.mapData<?php echo '['.$this->mapData['mapId'] . ']' ?>);
},{
selector: "#<?php echo 'c4g_map_' . $this->mapData['mapId'] ?>",
message: "YOUR_CONSENT_TEXT",
button: {
show: true
}
});
Hier wird der Cookiebar eine neue Funktion bekannt gemacht, welche ausschließlich ausgeführt werden soll, wenn der Cookie-Typ mit der ID "YOUR_COOKIE_TYP_ID" akzeptiert wurde. Innerhalb dieser Funktion ist nun der Code eingebettet, welcher ursprünglich in den Zeilen 17-19 zu finden war.
Für den direkten Aufruf der Karte (b) sind die Zeilen 24 und 25 relevant, welche wir nun ebenfalls ersetzen müssen:
Code:
cookiebar.addModule(YOUR_COOKIE_TYP_ID, function(){
window.mapData = window.mapData || {};
window.mapData<?php echo '['.$this->mapData['mapId'] . ']' ?> = <?php echo json_encode($this->mapData) ?>;
window.location.reload();
},{
selector: "#<?php echo 'c4g_map_' . $this->mapData['mapId'] ?>",
message: "YOUR_CONSENT_TEXT",
button: {
show: true
}
});
Hier passiert im Endeffekt genau das gleiche wie im Aufruf per Ajax, außer dass die Seite anschließend neu geladen wird. Dadurch, dass wir jedoch bereits erkennen konnten, dass die Erweiterung das Initialisieren der Karte "on-the-fly" über die Methode initMap erlaubt, können wir m.E. folgende Zeile ersetzen um uns einen reload der Seite zu sparen:
Code:
window.location.reload();
ersetzen durch
Code:
window.initMap(window.mapData<?php echo '['.$this->mapData['mapId'] . ']' ?>);
An dieser Stelle sollte nun alles korrekt geblockt werden und die Karte müsste sich nach bestätigen und ohne neu laden der Seite initialisieren.
Dadurch, dass wir diese Zeile nun ersetzt haben, sehen beide Aufrufe identisch aus und ermöglicht uns somit den Code zu verkleinern und auf eine gemeinsame Funktion zu referenzieren:
Beide zuvor eingebauten Skripte können nun also durch folgenden Code ersetzt werden:
Code:
cookiebar.addModule(YOUR_COOKIE_TYP_ID, initMapFromCookiebar,{
selector: "#<?php echo 'c4g_map_' . $this->mapData['mapId'] ?>",
message: "YOUR_CONSENT_TEXT",
button: {
show: true
}
});
Anschließend müssen wir die Funktion an einer globalen Stelle zur Verfügung stellen. Ich habe diese nun zwischen Zeile 28-29 eingebaut:
Code:
function initMapFromCookiebar(){
window.mapData = window.mapData || {};
window.mapData<?php echo '['.$this->mapData['mapId'] . ']' ?> = <?php echo json_encode($this->mapData) ?>;
window.initMap(window.mapData<?php echo '['.$this->mapData['mapId'] . ']' ?>);
}
Folgende Werte müssen noch ersetzt werden:
YOUR_COOKIE_TYP_ID: Die ID des Cookie-Typen auf den reagiert werden soll
YOUR_CONSENT_TEXT: Text welcher angezeigt wird, solange die Karte nicht akzeptiert wurde
Ich bin gespannt ob es funktioniert.
LG Doi
EDIT:
Wir konnten das ganze nun in Kombination der beiden Erweiterungen durchtesten. Wichtig ist, dass kein reload der Seite stattfinden darf, da es logischerweise sonst zu einer Endlosschleife kommt. Hier sollte direkt die Initialisierung der Karte stattfinden:
Code:
- window.location.reload();
+ window.initMap(window.mapData<?php echo '['.$this->mapData['mapId'] . ']' ?>);