Powermail: Werte aus Multiple-Selectbox in Datenbank speichern

  • IvoFrie IvoFrie
    T3PO
    0 x
    17 Beiträge
    0 Hilfreiche Beiträge
    20. 12. 2010, 19:57

    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:

    1. ##################
    2. # Prefill Canton #
    3. ##################
    4. lib.canton = COA_INT
    5. lib.canton {
    6. 10 = TEXT
    7. 10.value = <label for="uid4">Select:</label>
    8. 20 = CONTENT
    9. 20.wrap = <select id="uid4" name="tx_powermail_pi1[uid4][]" size="5" multiple="multiple">|</select>
    10. 20 {
    11. table = tx_fmprojectdb_canton
    12. pidInList = 35
    13. orderBy = uid
    14. }
    15. renderObj = COA
    16. renderObj {
    17. 10 = COA
    18. 10 {
    19. 10 = TEXT
    20. 10 {
    21. field = uid
    22. wrap = <!!=|>
    23. }
    24. 20 = TEXT
    25. 20 {
    26. field = designation
    27. wrap = |</option>
    28. }
    29. }
    30. }
    31. }
    32. }

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

    Und die Abfrage / Speicherung:
    1. tx_fmprojectdb_main.canton = TEXT
    2. tx_fmprojectdb_main.canton.data = TSFE:fe_user|sesData|powermail_188|uid4

    Im Manual steht folgendes, was vermutlich auf den richtigen Weg hinweist:
    1. tt_address.company = TEXT
    2. 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!


  • 1
  • Dirk1 Dirk1
    R2-D2
    0 x
    126 Beiträge
    0 Hilfreiche Beiträge
    23. 12. 2010, 00:00

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

    1. tt_femessage.fegroups = COA
    2. tt_femessage.fegroups{
    3. 10 = TEXT
    4. 20 = TEXT
    5. 20.wrap = ,|
    6. 20.required = 1
    7. 30<.20
    8. 40<.20
    9.  
    10. 10.data = TSFE:fe_user|sesData|powermail_3989|uid1655|0
    11. 20.data = TSFE:fe_user|sesData|powermail_3989|uid1655|1
    12. 30.data = TSFE:fe_user|sesData|powermail_3989|uid1655|2
    13. 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 IvoFrie
    T3PO
    0 x
    17 Beiträge
    0 Hilfreiche Beiträge
    23. 12. 2010, 10:33

    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.

    1. ##################
    2. # Prefill Canton #
    3. ##################
    4. lib.canton = COA_INT
    5. lib.canton {
    6. 10 = TEXT
    7. 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">
    8. 20 = TEXT
    9. 20.value = <label for="uid4">Select:</label>
    10. 30 = CONTENT
    11. 30.wrap = <select id="uid4" name="tx_powermail_pi1[uid4][]" size="5" multiple="multiple">|</select>
    12. 30 {
    13. table = tx_fmprojectdb_canton
    14. pidInList = 35
    15. orderBy = uid
    16. }
    17. renderObj = COA
    18. renderObj {
    19. 10 = COA
    20. 10 {
    21. 10 = TEXT
    22. 10 {
    23. field = uid
    24. wrap = <!!=|>
    25. }
    26. 20 = TEXT
    27. 20 {
    28. field = designation
    29. wrap = |</option>
    30. }
    31. }
    32. }
    33. }
    34. 40 = TEXT
    35. 40.value = </div>
    36. }

    Danach habe ich mir die Relation vorgenommen und folgendermassen erweitert (siehe 10.3.1 usw.):
    1. # add mm relation to uid 2 of tt_address_group (via mm table)
    2. tx_fmprojectdb_main._mm = COA
    3. tx_fmprojectdb_main._mm.10 = COA
    4. # 1 is always the mm table
    5. tx_fmprojectdb_main._mm.10.1 = TEXT
    6. tx_fmprojectdb_main._mm.10.1.value = tx_fmprojectdb_main_canton_mm
    7. # 2 is always the other table
    8. tx_fmprojectdb_main._mm.10.2 = TEXT
    9. tx_fmprojectdb_main._mm.10.2.value = tx_fmprojectdb_canton
    10. # 3 is always the uid of the other table to get a relation to this (in this case uid2 of tt_address_group)
    11. tx_fmprojectdb_main._mm.10.3 = COA
    12. tx_fmprojectdb_main._mm.10.3 {
    13. 1 = TEXT
    14. 1.data = TSFE:fe_user|sesData|powermail_188|uid4|0
    15. 2 < .1
    16. 2.data = TSFE:fe_user|sesData|powermail_188|uid4|1
    17. }

    Danach der Eintrag in die Datenbank, ähnlich bis gleich wie bei Dirk.
    1. tx_fmprojectdb_main.canton = COA
    2. tx_fmprojectdb_main.canton {
    3. 1 = TEXT
    4. 1.data = TSFE:fe_user|sesData|powermail_188|uid4|0
    5. 1.wrap = |,
    6. 2 < .1
    7. 2.data = TSFE:fe_user|sesData|powermail_188|uid4|1
    8. 3 < .1
    9. 3.data = TSFE:fe_user|sesData|powermail_188|uid4|2
    10. 4 < .1
    11. 4.data = TSFE:fe_user|sesData|powermail_188|uid4|3
    12. 5 < .1
    13. 5.data = TSFE:fe_user|sesData|powermail_188|uid4|4
    14. }

    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

  • 1