Zum Inhalt springen

Powermail: Werte aus Multiple-Selectbox in Datenbank speichern

Erstellt am 20. Dezember 2010 · 2 Antworten · letzte Antwort am 23. Dezember 2010

Tags: Frage

IvoFrie ·

Guten Abend,

Ich bin dabei, mit Powermail 1.5.7 auf Typo3 4.4.4 ein Projekteingabeformular zu realisieren, welches die Werte in eine eigene Datenbankstruktur (EXT:browser) speichert.

Das klappt soweit wunderbar, auch die Selectboxen werden dynamisch befüllt und ohne Multiple-Auswahl wie gewünscht gespeichert.

Mit Multiple-Auswahl hingegen schaffe ich es nicht, die auf der Bestätigungsseite und in der E-Mail Werte in die Datenbank zu bekommen.

Hintergrund: Mittels einer Selectbox sollen mehrere Kantone (=Bundesländer) selektiert werden können, in welchen ein Projekt aktiv ist.

Das Prefill:

##################
# Prefill Canton #
##################
lib.canton = COA_INT
lib.canton {
  10 = TEXT
  10.value = <label for="uid4">Select:</label>
  20 = CONTENT
  20.wrap = <select id="uid4" name="tx_powermail_pi1[uid4][]" size="5" multiple="multiple">|</select>
  20 {
    table = tx_fmprojectdb_canton
    select {
      pidInList = 35
      orderBy = uid
    }
    renderObj = COA
    renderObj {
      10 = COA
      10 {
        10 = TEXT
        10 {
          field = uid
          wrap = <option value="|">
        }
        20 = TEXT
        20 {
          field = designation
          wrap = |</option>
        }
      }
    }
  }
}

Die mm-Relation

# add mm relation to uid 2 of tt_address_group (via mm table)
        tx_fmprojectdb_main._mm = COA
        tx_fmprojectdb_main._mm.10 = COA
        # 1 is always the mm table
        tx_fmprojectdb_main._mm.10.1 = TEXT
        tx_fmprojectdb_main._mm.10.1.value = tx_fmprojectdb_main_canton_mm
        # 2 is always the other table
        tx_fmprojectdb_main._mm.10.2 = TEXT
        tx_fmprojectdb_main._mm.10.2.value = tx_fmprojectdb_canton
        # 3 is always the uid of the other table to get a relation to this (in this case uid2 of tt_address_group)
        tx_fmprojectdb_main._mm.10.3 = TEXT
        tx_fmprojectdb_main._mm.10.3.data = TSFE:fe_user|sesData|powermail_188|uid4

Und die Abfrage / Speicherung:

        tx_fmprojectdb_main.canton = TEXT
        tx_fmprojectdb_main.canton.data = TSFE:fe_user|sesData|powermail_188|uid4

Im Manual steht folgendes, was vermutlich auf den richtigen Weg hinweist:

tt_address.company = TEXT
tt_address.company.data = TSFE:fe_user|sesData|powermail_88|uid21|1

Wie kann man der Selectbox diese Unter-IDs dynamisch mitgeben?

Wie genau müssen die Werte aus der Multiple-Selectbox in die Datenbank geschrieben werden?

Ein kleiner (oder grosser) Anstoss wäre super, herzlichen Dank im voraus!

Dirk1 ·

An der gleichen Fragestellung bin ich auch gerade.
Ich habe das Problem vorerst so gelöst

    tt_femessage.fegroups = COA
    tt_femessage.fegroups{
      10 = TEXT
      20 = TEXT
      20.wrap = ,|
       20.required = 1
      30<.20
      40<.20
      
      10.data = TSFE:fe_user|sesData|powermail_3989|uid1655|0
      20.data = TSFE:fe_user|sesData|powermail_3989|uid1655|1
      30.data = TSFE:fe_user|sesData|powermail_3989|uid1655|2
      40.data = TSFE:fe_user|sesData|powermail_3989|uid1655|3

Das ist nicht sonderlich schön, schon weil man im voraus antizipieren muss, wie viele Werte maximal markiert werden (hier willkürlich 4).

TSFE:fe_user|sesData|powermail_3989|uid1655 liefert leider gar nichts zurück. Ich denke auch, da müsste es noch eine andere Lösung geben.

Vielleicht meldet sich ja doch noch jemand

Dirk

IvoFrie ·

Hallo Dirk,

Vielen Dank für Dein Feedback!

Unabhängig von Dir bin ich ebenfalls auf diese Lösung gestossen, doch der Reihe nach.

Das oben von mir gepostete Prefill ist im Prinzip richtig, ich habe lediglich den Wrap des Formularfeldes noch angepasst.

##################
# Prefill Canton #
##################
lib.canton = COA_INT
lib.canton {
  10 = TEXT
  10.value = <div id="powermaildiv_uid4" class="tx_powermail_pi1_fieldwrap_html tx_powermail_pi1_fieldwrap_html_text tx_powermail_pi1_fieldwrap_html_4 even">
  20 = TEXT
  20.value = <label for="uid4">Select:</label>
  30 = CONTENT
  30.wrap = <select id="uid4" name="tx_powermail_pi1[uid4][]" size="5" multiple="multiple">|</select>
  30 {
    table = tx_fmprojectdb_canton
    select {
      pidInList = 35
      orderBy = uid
    }
    renderObj = COA
    renderObj {
      10 = COA
      10 {
        10 = TEXT
        10 {
          field = uid
          wrap = <option value="|">
        }
        20 = TEXT
        20 {
          field = designation
          wrap = |</option>
        }
      }
    }
  }
  40 = TEXT
  40.value = </div>
}

Danach habe ich mir die Relation vorgenommen und folgendermassen erweitert (siehe 10.3.1 usw.):

 # add mm relation to uid 2 of tt_address_group (via mm table)
    tx_fmprojectdb_main._mm = COA
    tx_fmprojectdb_main._mm.10 = COA
    # 1 is always the mm table
    tx_fmprojectdb_main._mm.10.1 = TEXT
    tx_fmprojectdb_main._mm.10.1.value = tx_fmprojectdb_main_canton_mm
    # 2 is always the other table
    tx_fmprojectdb_main._mm.10.2 = TEXT
    tx_fmprojectdb_main._mm.10.2.value = tx_fmprojectdb_canton
    # 3 is always the uid of the other table to get a relation to this (in this case uid2 of tt_address_group)
    tx_fmprojectdb_main._mm.10.3 = COA
    tx_fmprojectdb_main._mm.10.3 {
      1 = TEXT
      1.data = TSFE:fe_user|sesData|powermail_188|uid4|0
      2 < .1
      2.data = TSFE:fe_user|sesData|powermail_188|uid4|1
    }

Danach der Eintrag in die Datenbank, ähnlich bis gleich wie bei Dirk.

    tx_fmprojectdb_main.canton = COA
    tx_fmprojectdb_main.canton {
      1 = TEXT
      1.data = TSFE:fe_user|sesData|powermail_188|uid4|0
      1.wrap = |,
      2 < .1
      2.data = TSFE:fe_user|sesData|powermail_188|uid4|1
      3 < .1
      3.data = TSFE:fe_user|sesData|powermail_188|uid4|2
      4 < .1
      4.data = TSFE:fe_user|sesData|powermail_188|uid4|3
      5 < .1
      5.data = TSFE:fe_user|sesData|powermail_188|uid4|4
    }

Beim Powermail-Debugging habe ich dann festgestellt, dass die ausgewählten Werte in der Session vorhanden und in die Datenbank geschrieben werden, jedoch nicht ganz korrekt.

Hatte ich die Optionen mit Value 1 und 2 aktiviert, wurde lediglich eine Relation angelegt und mir eine "12" in das M-M-Relation-Feld eingetragen, dies obwohl im Debug angezeigt wurde, dass die Werte "1,2" verfügbar sind. Das Problem ist also, dass diese Einträge per Wrap irgendwie getrennt werden müssen, so dass zwei Relationen angelegt werden.

Item, ich habe mir dann gedacht, dass ich halt bei diesem Feld auf die M-M-Relation verzichte (True M-M-Relations im Kickstarter deaktiviert) und siehe da, es geht!

Es bleibt also die Frage, wie die Einträge für eine M-M-Relation getrennt werden können, vielleicht hat da noch jemand eine Idee.

Und ja, tatsächlich ist es etwas unschön, dass man für jeden Wert eine separate Eingabe konfigurieren muss, bei einer begrenzten Anzahl statischer Werte (bei mir 26 Kantone) ist das jedoch für den Moment für mich vertretbar, zumal ich auch einen Eintrag "Gesamte Schweiz" anbiete.

Gruss, Ivo