Zum Inhalt springen

[formhandler] Werte in externe Tabelle sichern und transformieren

Erstellt am 6. Dezember 2009 · 5 Antworten · letzte Antwort am 7. Dezember 2009

Tags: Formhandler, Frage

andreas31 ·

Hallo,

formhandler bietet ja die Möglichkeit die Formularwerte in einer beliebigen
Tabelle zu sichern und ist mit der "mapping" Funktionalität ziemlich flexibel.

Ist es möglich den Wert irgendwie zu transformieren oder in abhängigkeit des
POST-Parameters einen anderen Wert zu speichern?

Ich möchte zu Beispiel beim ankreuzen der Checkbox Newsletter den Wert "1"
speichern und nicht den Default-Wert "on" verwenden.

finishers { 
  1 {
    # ....
  }
	
  2 {
    class = Tx_Formhandler_Finisher_DB
    config {
      table = tx_mytable
      fields {
        # hier sollt der Wert "on" in 1 geändert werden
        newsletter.mapping = newsletter
      }
    }
  }
}
gmf ·

Neben der Option "mapping" gibt es für jedes Feld noch die Möglichkeit ein "preProcessing" und "postProcessing" zu definieren. Dort kannst du mit einem einfachen cObject den Wert ändern.

andreas31 ·

Hallo,

gmf schrieb

Neben der Option "mapping" gibt es für jedes Feld noch die Möglichkeit ein "preProcessing" und "postProcessing" zu definieren. Dort kannst du mit einem einfachen cObject den Wert ändern.

Danke für den Tipp!

Ich habs mal so versucht:

...
fields {
  newsletter {
    postProcessing = TEXT
    postProcessing.value = 1
    mapping = newsletter
  }
}
...

Allerdings habe ich die Zeile

$options['postProcessing.']['value'] = $queryFields[$fieldname];

in "Tx_Formhandler_Finisher_DB" auskommentieren müssen damit
das postProcessing funktioniert.

Diese Variante ist natürlich noch nicht richtig. Jetzt wir immer
der Wert "1" gespeichert.
Kann ich das rein über TS lösen - dh. nur wenn der Checkbox-Wert "on" ist
sollte "1" gespeichert werden. (default in der DB ist "0").

Oder muß ich hier ein "userFunc" verwenden?

gmf ·

Ja, das mit dem "value" ist leider richtig, aber man könnte es auch so lösen:

...
fields {
  newsletter {
    postProcessing = TEXT
    postProcessing.value.override = 1
  }
}
...

Um das Ganze nur zu tun, wenn die Checkbox gewählt wurde:

[globalVar = GP:newsletter=on]
...
fields {
  newsletter {
    postProcessing = TEXT
    postProcessing.value.override = 1
  }
}
...
[global]
andreas31 ·

Hallo,

jetzt gibts nur mehr "normale" TS Probleme ...

hab es jetzt mit der condition versucht - die wird allerdings nicht ausgewertet.
Laut Formhandler Debug-Ausgabe ist der Newsletter-Parameter aber "on".

[globalVar = GP:newsletter=on]
plugin.Tx_Formhandler.settings.predef.contact_form.finishers.2.config.fields {
    newsletter {
        postProcessing = TEXT
        postProcessing.value = 1
    }
}
[global]
plugin.Tx_Formhandler.settings.predef.contact_form {
...
}

Mit einer anderen condition (nur zum Test auf "dayofmonth" geprüft)
hat es funktioniert.

andreas31 ·

Der prefix war schuld - so funktionierts:

[globalVar = GP:formhandler|newsletter=on]

gmf - danke nochmal für die Hinweise!