|
| 1 | +<?php |
| 2 | +// Vektorkarten Demo - Uebersicht & Einbindung |
| 3 | +?> |
| 4 | +<?php |
| 5 | +// no addon var needed, all text is hardcoded for simplicity |
| 6 | +?> |
| 7 | +<div class="panel panel-default"> |
| 8 | + <div class="panel-heading"> |
| 9 | + <h3 class="panel-title"> |
| 10 | + <i class="rex-icon rex-icon-map"></i> |
| 11 | + Vektorkarten Demo |
| 12 | + <span class="label label-success" style="margin-left:6px;font-weight:normal;font-size:11px">MapLibre GL JS</span> |
| 13 | + <span class="label label-default" style="margin-left:4px;font-weight:normal;font-size:11px">OpenFreeMap</span> |
| 14 | + </h3> |
| 15 | + </div> |
| 16 | + <div class="panel-body"> |
| 17 | + |
| 18 | + <div class="row" style="margin-bottom:16px"> |
| 19 | + <div class="col-md-4"> |
| 20 | + <div class="alert alert-success" style="margin:0"> |
| 21 | + <strong>Vorteile von Vektorkarten</strong> |
| 22 | + <ul style="margin:8px 0 0 0;padding-left:18px;font-size:13px"> |
| 23 | + <li>Stufenlos zoombar ohne Pixelrauschen</li> |
| 24 | + <li>Client-seitig gestylte Vektorkarten</li> |
| 25 | + <li>Viel kleinere Datenmengen als Raster</li> |
| 26 | + <li>Rotation, Pitch & 3D-Gebäude möglich</li> |
| 27 | + </ul> |
| 28 | + </div> |
| 29 | + </div> |
| 30 | + <div class="col-md-4"> |
| 31 | + <div class="alert alert-info" style="margin:0"> |
| 32 | + <strong>DSGVO-konformer Proxy</strong> |
| 33 | + <ul style="margin:8px 0 0 0;padding-left:18px;font-size:13px"> |
| 34 | + <li>Kein direkter Kontakt zu externen Servern</li> |
| 35 | + <li>Alle Tiles laufen durch lokalen PHP-Proxy</li> |
| 36 | + <li>IP-Adressen der Besucher bleiben privat</li> |
| 37 | + <li>Server-seitiges Caching der Tile-Daten</li> |
| 38 | + </ul> |
| 39 | + </div> |
| 40 | + </div> |
| 41 | + <div class="col-md-4"> |
| 42 | + <div class="alert alert-warning" style="margin:0"> |
| 43 | + <strong>Voraussetzungen</strong> |
| 44 | + <p style="margin:8px 0 0 0;font-size:13px"> |
| 45 | + MapLibre GL JS benötigt WebGL-Unterstützung im Browser. |
| 46 | + Alle Kacheln (<code>.pbf</code>) werden via REDAXO-Proxy |
| 47 | + von OpenFreeMap geladen und gecacht. |
| 48 | + </p> |
| 49 | + </div> |
| 50 | + </div> |
| 51 | + </div> |
| 52 | + |
| 53 | + <div style="margin-bottom:12px;display:flex;align-items:center;gap:12px;flex-wrap:wrap"> |
| 54 | + <div> |
| 55 | + <label style="font-weight:bold;margin-right:8px;margin-bottom:0">Stil:</label> |
| 56 | + <div class="btn-group" role="group"> |
| 57 | + <button type="button" class="btn btn-sm btn-primary vm-demo-style-btn active" data-style="liberty">Liberty</button> |
| 58 | + <button type="button" class="btn btn-sm btn-default vm-demo-style-btn" data-style="bright">Bright</button> |
| 59 | + <button type="button" class="btn btn-sm btn-default vm-demo-style-btn" data-style="positron">Positron</button> |
| 60 | + <button type="button" class="btn btn-sm btn-default vm-demo-style-btn" data-style="satellite" title="ESRI World Imagery – kein API-Key">🛰 Satellit</button> |
| 61 | + </div> |
| 62 | + </div> |
| 63 | + <div> |
| 64 | + <label style="font-weight:bold;margin-right:8px;margin-bottom:0">Sprache:</label> |
| 65 | + <div class="btn-group" role="group"> |
| 66 | + <button type="button" class="btn btn-xs btn-primary vm-demo-lang-btn active" data-lang="de" title="Deutsch">DE</button> |
| 67 | + <button type="button" class="btn btn-xs btn-default vm-demo-lang-btn" data-lang="en" title="English">EN</button> |
| 68 | + <button type="button" class="btn btn-xs btn-default vm-demo-lang-btn" data-lang="fr" title="Français">FR</button> |
| 69 | + <button type="button" class="btn btn-xs btn-default vm-demo-lang-btn" data-lang="es" title="Español">ES</button> |
| 70 | + <button type="button" class="btn btn-xs btn-default vm-demo-lang-btn" data-lang="it" title="Italiano">IT</button> |
| 71 | + <button type="button" class="btn btn-xs btn-default vm-demo-lang-btn" data-lang="nl" title="Nederlands">NL</button> |
| 72 | + <button type="button" class="btn btn-xs btn-default vm-demo-lang-btn" data-lang="ja" title="日本語">JA</button> |
| 73 | + <button type="button" class="btn btn-xs btn-default vm-demo-lang-btn" data-lang="ar" title="العربية">AR</button> |
| 74 | + </div> |
| 75 | + </div> |
| 76 | + <div> |
| 77 | + <label style="font-weight:bold;margin-right:8px;margin-bottom:0">Ansicht:</label> |
| 78 | + <button type="button" class="btn btn-sm btn-primary active" id="vm-demo-3d-toggle" title="3D-Gebäude an/aus"> |
| 79 | + <i class="rex-icon rex-icon-layers"></i> 3D Gebäude |
| 80 | + </button> |
| 81 | + </div> |
| 82 | + <div> |
| 83 | + <label style="font-weight:bold;margin-right:8px;margin-bottom:0">Theme:</label> |
| 84 | + <div class="btn-group" role="group"> |
| 85 | + <button type="button" class="btn btn-xs btn-primary vm-demo-theme-btn active" data-theme="none">— Kein Theme</button> |
| 86 | + <button type="button" class="btn btn-xs btn-default vm-demo-theme-btn" data-theme="dark">Dark</button> |
| 87 | + <button type="button" class="btn btn-xs btn-default vm-demo-theme-btn" data-theme="warm">Warm</button> |
| 88 | + <button type="button" class="btn btn-xs btn-default vm-demo-theme-btn" data-theme="mono">Mono</button> |
| 89 | + </div> |
| 90 | + </div> |
| 91 | + </div> |
| 92 | + |
| 93 | + <div id="vm-demo-map" style="width:100%;height:500px;border-radius:4px;overflow:hidden;"></div> |
| 94 | + |
| 95 | + <p class="text-muted" style="margin-top:8px;font-size:12px"> |
| 96 | + OpenFreeMap · DSGVO-konform via REDAXO-Proxy · kein API-Key erforderlich |
| 97 | + </p> |
| 98 | + |
| 99 | + </div> |
| 100 | +</div> |
| 101 | + |
| 102 | +<!-- ================================================================ |
| 103 | + FRONTEND-EINBINDUNG |
| 104 | + ================================================================ --> |
| 105 | +<div class="panel panel-info"> |
| 106 | + <div class="panel-heading"> |
| 107 | + <h3 class="panel-title"> |
| 108 | + <i class="rex-icon rex-icon-code"></i> |
| 109 | + Frontend-Einbindung — So kommt die Karte auf die Website |
| 110 | + </h3> |
| 111 | + </div> |
| 112 | + <div class="panel-body"> |
| 113 | + |
| 114 | + <div class="alert alert-success" style="margin-bottom:20px"> |
| 115 | + <strong>Automatisch aktiv:</strong> Nach der Installation werden CSS und JS automatisch in jede Frontend-Seite geladen — du musst nichts weiter tun. |
| 116 | + Einfach <code><vectormap></code> in Modul-Output oder Template schreiben, fertig. |
| 117 | + </div> |
| 118 | + |
| 119 | + <div class="row"> |
| 120 | + <div class="col-md-6"> |
| 121 | + <h4 style="margin-top:0">Schritt 1: Im Modul-Input (Backend)</h4> |
| 122 | + <p class="text-muted" style="font-size:13px">Koordinatenfeld mit automatischem Karten-Picker:</p> |
| 123 | + <pre style="font-size:12px"><div class="form-group"> |
| 124 | + <label>Koordinaten</label> |
| 125 | + <input type="text" |
| 126 | + name="REX_INPUT_VALUE[1]" |
| 127 | + value="REX_VALUE[1]" |
| 128 | + class="form-control" |
| 129 | + data-vector-picker="1" |
| 130 | + placeholder="lat,lng"> |
| 131 | +</div></pre> |
| 132 | + <p class="text-muted" style="font-size:12px">Der Button neben dem Feld öffnet die Kartenauswahl mit Adresssuche.</p> |
| 133 | + </div> |
| 134 | + <div class="col-md-6"> |
| 135 | + <h4 style="margin-top:0">Schritt 2: Im Modul-Output (Frontend)</h4> |
| 136 | + <p class="text-muted" style="font-size:13px">Karte ausgeben — kein PHP, kein JS:</p> |
| 137 | + <pre style="font-size:12px"><vectormap |
| 138 | + lat="REX_VALUE[1]" |
| 139 | + lng="REX_VALUE[2]" |
| 140 | + zoom="14" |
| 141 | + height="400px" |
| 142 | + markers='[{ |
| 143 | + "lat":REX_VALUE[1], |
| 144 | + "lng":REX_VALUE[2], |
| 145 | + "popup":"Unser Standort" |
| 146 | + }]'> |
| 147 | +</vectormap> |
| 148 | + |
| 149 | +<!-- Alternativ: lat,lng aus einem Feld --> |
| 150 | +<?php |
| 151 | + [$lat,$lng] = explode(',', 'REX_VALUE[1]' . ',0'); |
| 152 | +?> |
| 153 | +<vectormap lat="<?= (float)$lat ?>" |
| 154 | + lng="<?= (float)$lng ?>" |
| 155 | + zoom="14"> |
| 156 | +</vectormap></pre> |
| 157 | + </div> |
| 158 | + </div> |
| 159 | + |
| 160 | + <hr> |
| 161 | + |
| 162 | + <h4>Manuell einbinden (falls Auto-Loading deaktiviert)</h4> |
| 163 | + <p class="text-muted" style="font-size:13px"> |
| 164 | + Wenn das automatische Laden unter <a href="<?= rex_url::backendPage('vector_maps/settings') ?>">Einstellungen</a> deaktiviert ist, |
| 165 | + die Assets manuell im Template einfügen: |
| 166 | + </p> |
| 167 | + <?php $vmAddon = rex_addon::get('vector_maps'); ?> |
| 168 | + <pre style="font-size:12px"><!DOCTYPE html> |
| 169 | +<html> |
| 170 | +<head> |
| 171 | + <!-- 1. MapLibre GL CSS --> |
| 172 | + <link rel="stylesheet" href="<?= $vmAddon->getAssetsUrl('maplibre/maplibre-gl.css') ?>"> |
| 173 | + <!-- 2. Vector Maps Styles --> |
| 174 | + <link rel="stylesheet" href="<?= $vmAddon->getAssetsUrl('build/vectormaps.css') ?>"> |
| 175 | +</head> |
| 176 | +<body> |
| 177 | + |
| 178 | + <vectormap lat="51.43" lng="6.77" zoom="13"></vectormap> |
| 179 | + |
| 180 | + <!-- 3. MapLibre GL JS (defer) --> |
| 181 | + <script defer src="<?= $vmAddon->getAssetsUrl('maplibre/maplibre-gl.js') ?>"></script> |
| 182 | + <!-- 4. Vector Maps Web Component (defer) --> |
| 183 | + <script defer src="<?= $vmAddon->getAssetsUrl('build/vectormaps.js') ?>"></script> |
| 184 | +</body> |
| 185 | +</html></pre> |
| 186 | + |
| 187 | + <div class="alert alert-info" style="margin-bottom:0"> |
| 188 | + <strong>CSP-Hinweis:</strong> Falls eine Content-Security-Policy aktiv ist, genügt |
| 189 | + <code>worker-src blob:</code> — alle Tile-Anfragen laufen über den REDAXO-Proxy, |
| 190 | + keine externen <code>connect-src</code>-Einträge nötig. |
| 191 | + </div> |
| 192 | + |
| 193 | + </div> |
| 194 | +</div> |
| 195 | + |
| 196 | +<div class="panel panel-default"> |
| 197 | + <div class="panel-heading"> |
| 198 | + <h3 class="panel-title"> |
| 199 | + <i class="rex-icon rex-icon-edit"></i> |
| 200 | + Koordinaten-Picker Demo |
| 201 | + </h3> |
| 202 | + </div> |
| 203 | + <div class="panel-body"> |
| 204 | + <p>Klicke auf den Button, um den Koordinaten-Picker zu öffnen. Die gewählten Koordinaten werden ins Textfeld übernommen.</p> |
| 205 | + |
| 206 | + <div class="form-group"> |
| 207 | + <label for="vm-demo-picker-input">Koordinaten (Lat,Lng)</label> |
| 208 | + <input type="text" |
| 209 | + id="vm-demo-picker-input" |
| 210 | + class="form-control" |
| 211 | + placeholder="51.165691,10.451526" |
| 212 | + data-vector-picker="1"> |
| 213 | + <p class="help-block">Wähle einen Ort auf der Karte – die Koordinaten werden automatisch eingetragen.</p> |
| 214 | + </div> |
| 215 | + |
| 216 | + </div> |
| 217 | +</div> |
| 218 | + |
| 219 | +<!-- ================================================================ |
| 220 | + <vectormap> WEB COMPONENT |
| 221 | + ================================================================ --> |
0 commit comments