Die Extension wec_map
ermöglicht eine konfigurierbare google (oder OpenStreet) Map mit bereits im TYPO3 System vorhandenen Adressdaten, sei es aus tt_address, fe_users oder einer anderen Tabelle. In unserem Beispiel arbeiten wir fe_users Daten.
Die Extension kommt mit verschiedenen Modi daher: Simple Map, Table Map und Frontend-User Map. In unserem Beispiel verwenden wir die Daten aus fe_users, also binden wir die statischen Templates WEC Map API
und WEC Frontend User Map
ein und wählen im Plugindatensatz WEC-Frontend-Benutzerkarte
.
Unter dem Reiter „Kartendetails“ gibt man ganz unten („Ausgangspunkt“) zunächst den Ordner an, in dem sich die fe_users Daten befinden, die man anzeigen möchte. Zusätzlich kann man direkt darüber („Nach FE-Benutzergruppe filtern“) durch die Auswahl der Gruppen die Anzeige einschränken. Die weiteren Einstellungen sind optional und selbsterklärend (die Extension verfügt im Übrigen über ein sehr detailliertes Manual).
Das genügt bereits, um sich die Daten in der Karte anzeigen zu lassen (natürlich müssen die für die Geolokalisation relevanten Felder – PLZ, Stadt und Adresse – bei den fe_users Einträgen gefüllt sein).
Den Inhalt der „Bubble“ (und, wenn man will, das Symbol) werden über TypoScript konfiguriert. Man schaue sich das im Object Browser oder in der Datei pi2/static/setup.txt genauer an.
Das Minimum einer eigenen Konfiguration sieht in etwa so aus:
plugin.tx_wecmap_pi2.marker.description.10 { 10 = TEXT 10.field = address 10.wrap = | <br/> 20 = TEXT 20.field = zip 20.wrap = | 30 = TEXT 30.field = city 40 > } |
fe_groups mit einem select Statement auslesen und anzeigen
Die Schwierigkeit besteht nun darin, die jeweils zu dem einzelnen User zugehörigen Gruppen auszulesen und anzuzeigen. In der Tabelle fe_users sind im Feld usergroup
ja nicht die Gruppennamen, sondern lediglich die uids derselben verzeichnet. Diese auszulesen wäre einfach aber sinnlos.
Ein erster Versuch an die Anzeige der Gruppen zu gelangen geht in etwa in diese Richtung:
plugin.tx_wecmap_pi2.marker.description.10 { 100 = CONTENT 100.table = fe_groups 100 { select { pidInList = 50 } renderObj = TEXT renderObj.field = title wrap = | } } |
Hierbei werden immerhin die Gruppennamen angezeigt, aber bei jedem User sämtliche. Es fehlt das Statement, das es ermöglicht, dass nur die Gruppen des jeweiligen Eintrags angezeigt werden. Der entscheidende Hinweis
select.where.dataWrap = uid IN ( {field:usergroup} ) |
kam freundlicherweise vom Entwickler der Extension selbst. So sieht es dann im Ganzen aus:
plugin.tx_wecmap_pi2.marker.description.10 { 100 = CONTENT 100 { table = fe_groups select { pidInList = 50 where.dataWrap = uid IN ( {field:usergroup} ) } renderObj = TEXT renderObj.field = title wrap = | } } |
Sehr schön, das funktioniert. pidInList = 50
ist natürlich nur in diesem Beispiel der Ordner, in dem die Datensätze der fe_users und fe_groups liegen.
Die einzige Verbesserung, die noch zu machen ist, betrifft die Darstellung. Konkret möchte man die Gruppen am liebsten kommagetrennt und jeweils mit einem Leerzeichen nach einem Komma. Das ist wiederum nicht ganz trivial – irgendwas mit optionsplit
. Die Lösung, bei der ich mich hier bedient habe, sieht so aus:
temp.daten = TEXT temp.daten.cObject = CONTENT temp.daten.cObject { table = fe_groups select { pidInList = 50 where.dataWrap = uid IN ( {field:usergroup} ) } renderObj = TEXT renderObj { field = title wrap = ,| } stdWrap.substring = 1 } plugin.tx_wecmap_pi2.marker.description.10 { 10 = TEXT 10.field = address 10.wrap = | <br/> 10.if.isTrue.field = address 20 = TEXT 20.field = zip 20.wrap = | 20.if.isTrue.field = zip 30 = TEXT 30.field = city 30.wrap = | <br> 30.if.isTrue.field = city 40 > 100 < temp.daten 100.wrap = | 100.split { token = , cObjNum = 1 wrap = ||, |*|, || 1.current = 1 } } |
wec_map mit tt_address Daten – Darstellung nach Kategorien unterscheiden
Verwendet man ein aktuelles TYPO3 und tt_address Daten, so wird eine eventuelle Kategorisierung über die TYPO3-eigenen Kategorien (sys_category)
realisiert. Das erschwert die Darstellung, wenn man beispielsweise nur Adressdaten einer bestimmten Kategorie anzeigen oder wenn man unterschiedliche Icons je nach Kategorie verwenden möchte. Folgendes TypoScript kann vielleicht helfen:
plugin.tx_wecmap_pi3.tables.10 { table = tt_address # select sys_category id 1 (Kategorie 1) select = * where > join ( JOIN sys_category_record_mm ON sys_category_record_mm.tablenames = 'tt_address' AND sys_category_record_mm.fieldname = 'categories' AND sys_category_record_mm.uid_foreign = tt_address.uid AND sys_category_record_mm.uid_local = 1 ) icon { iconID = kategorie1 ... imagepath = fileadmin/template/Images/kategorie1.png ... } } plugin.tx_wecmap_pi3.tables.20 < plugin.tx_wecmap_pi3.tables.10 plugin.tx_wecmap_pi3.tables.20 { # select sys_category id 2 (Kategorie 2) table = tt_address select = * where > join ( JOIN sys_category_record_mm ON sys_category_record_mm.tablenames = 'tt_address' AND sys_category_record_mm.fieldname = 'categories' AND sys_category_record_mm.uid_foreign = tt_address.uid AND sys_category_record_mm.uid_local = 2 ) icon { iconID = kategorie2 imagepath = fileadmin/template/Images/kategorie2.png } } |