wec_map mit fe_users Daten – Anzeige der usergroups in der bubble

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 = | &nbsp; 
 
  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 = | &nbsp; 
  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 =  ||,&nbsp; |*|,&nbsp; ||
      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
  }
}