Frontend
Im Frontend besteht der MapsLoader aus einer Provider-Abstraktion, einem Storefront-Plugin, dem CMS-Element und den nötigen Twig-Bausteinen. Die eigentliche Karten-Logik liegt im npm-Paket @leoparden/maps-provider.
Globale Konfiguration
meta.html.twig überträgt Anbieter und API-Key aus der Plugin-Konfiguration in den Browser:
Über window.maps_provider entscheidet @leoparden/maps-provider, welche Implementierung (Google Maps oder Leaflet/OSM) GetProvider() zurückliefert.
Provider & ServiceProvider
MapsProviderPlugin (gebunden an body) instanziiert den Provider, registriert ihn als ServiceProvider unter dem Namen MapsProviderPlugin und startet anschließend das Maps-Plugin auf allen [data-maps]-Elementen:
Das Maps-Plugin
maps.plugin.ts liest seine Optionen aus dem data-maps-options-Attribut und baut Karte, Marker und Info-Fenster auf. Verfügbare Optionen:
Option | Standard | Bedeutung |
|---|---|---|
|
| Mittelpunkt der Karte |
|
| Zoomstufe |
|
| URL der Marker-Grafik (Fallback: Leaflet-Standardmarker) |
| – | Inhalt des Info-Fensters |
|
| Karten-Stil (über |
Der eigentliche Aufbau läuft über die einheitliche Provider-API:
prepare() kapselt das Cookie-Consent: Der Callback läuft erst, wenn der Besucher dem Karten-Cookie zugestimmt hat.
CMS-Element „maps"
In der Administration registriert main.ts die Komponenten maps-component, maps-config und maps-preview sowie das CMS-Element maps (Label plugin.leoparden.MapsLoader.label). Die Konfigurations-Komponente blendet beim Mouseover eine interaktive Karte ein und schreibt lat/lon/zoom beim Verschieben/Zoomen zurück in die Element-Konfiguration.
Im Storefront rendert cms-element-maps.html.twig das Element, indem es die Feld-Konfiguration zu data-maps-options serialisiert:
Einbindung in ein eigenes Plugin
Aufsetzende Plugins implementieren kein eigenes Karten-Handling, sondern liefern nur ein [data-maps]-Element mit den passenden Optionen und binden den Privacy-Block ein (er übernimmt das Cookie-Handling):
Wird ein eigenes Storefront-TS-Plugin benötigt, holt es sich den Provider über window.ServiceProvider.get("MapsProviderPlugin") und nutzt dieselbe API wie oben. Für die Typisierung im eigenen Plugin verweist die tsconfig.json auf die Shims aus @leoparden/plugin-tools-storefront sowie die shims.d.ts des MapsLoader (siehe readme.md).
Snippets
Alle Snippet-Keys folgen dem Präfix plugin.leoparden.MapsLoader.*. Die Storefront-Snippets liegen unter src/Resources/snippet/ (DE/EN), das Label des CMS-Elements in den Administrations-Snippets des Moduls:
Key | Ort | Verwendung |
|---|---|---|
| Administration | Bezeichnung des CMS-Elements |
| Storefront | Cookie-Bezeichnung (Komfortfunktionen) |
| Storefront | Datenschutz-Hinweistext vor dem Laden der Karte |
| Storefront | Beschriftung des Zustimmungs-Buttons |