[Frage] Formhandler nach Absenden Werte auswerten/manipuleren bevor E-Mail versandt wird? TYPO3-Version: 6.1.1

  • typonewbe typonewbe
    Sternenflotten-Admiral
    0 x
    197 Beiträge
    3 Hilfreiche Beiträge
    05. 05. 2015, 20:31

    Hallo Liebe TYPO3 Gemeinde,

    ich hab mal wieder kleines Problem diesmal mit der Erweiterung Formhandler.

    Folgendes Szenarion:
    Ich habe mehrere Select-Boxen/checkboxen die in Abhängigkeit stehen.
    Einmal die Sportarten und einmal die Entsprechenden Distanzen dazu.

    Z.B. wähle ich Laufen geht eine Box auf aus der ich dann wählen kann "1 Runde", "2 Runden", etc.

    Die Werte die ich bekomme sind nicht die Labels sondern die IDs der Datensätze aus den Tabellen.
    Wenn ich jetzt in dem TEMPLATE einfach nur:

    1. <!-- ###TEMPLATE_EMAIL_ADMIN_PLAIN### begin -->
    2. Folgende Daten wurden eingegeben:
    3.  
    4. Vorname: ###value_firstname###
    5. Nachname: ###value_name###
    6. Straße: ###value_streetAndNumber###
    7. PLZ/Ort: ###value_zip### ###value_city###
    8. Sportarten:
    9.  
    10. ###value_distance###
    11. <!-- ###TEMPLATE_EMAIL_ADMIN_PLAIN### end -->

    versende.
    Bekomme ich eine Mail die unter Sporten folgendes abbildet:
    Folgende Daten wurden eingegeben:
    ... Werte davor
    Sportarten:
    0,2,0,4

    -----------
    Wie Ihr seht werden die Werte zwar korrekt übergeben allerdings kann ein Mensch damit nicht viel Anfangen.

    Ich habe mir nun eine userFunc geschrieben welche die GET/Post Werte holt und über die Datenbank die Labels ausgibt und gleich mal schön formatiert.

    Jetzt dachte ich mir mittels "Finisher_Mail" könnte ich die Werte schon manipulieren da ich gesehen habe das ja auch email und subject dynamisch ausgelesen werden können also habe ich folgendes probiert.

    1. plugin.Tx_Formhandler.settings.predef.contact {
    2. finishers {
    3. 1.class = Finisher_Mail
    4. 1.config {
    5. admin {
    6. to_email = TEXT
    7. to_email.value = meine@email.de
    8. subject = TEXT
    9. subject.value = Kontaktaufnahme von {GP:formhandler|firstname} {GP:formhandler|name}
    10. subject.insertData = 1
    11. sender_email = domain@email.de
    12. distance = USER
    13. distance {
    14. userFunc = user_form->getDisciplineForPlainMail
    15. staticPid = 10
    16. }
    17. }
    18.  
    19. }
    20. user {
    21. to_email = email
    22.  
    23. subject = TEXT
    24. subject.value = Ihre Kontaktaufnahme mit uns
    25.  
    26. sender_email = domain@email.de
    27. }
    28. }
    29. 2 {
    30. class = Tx_Formhandler_Finisher_SubmittedOK
    31. config.returns = 1
    32. }
    33. }
    34. }

    Aber das klappt nicht. Auch habe ich den Code schon in diverse andere Klassen gepackt wie
    saveInterceptors, initInterceptors aber die Wirkung bleibt die selbe es wird immer der reine Wert also 0,2,0,4 ausgegeben.

    Ich kann mir nicht vorstellen das eine so mächtige Erweiterung es nicht schafft die Werte vor dem versenden zu manipulieren.

    Hat jemand von euch ne Idee?

    Danke schon mal im Voraus für die Mühe

    Gruß typonewbe


  • 1
  • jenses jenses
    Flash Gordon
    0 x
    3087 Beiträge
    106 Hilfreiche Beiträge
    06. 05. 2015, 09:21

    Ich glaube, du bist da auf dem Holzweg.
    Laut [url=http://www.typo3-formhandler.com/documentation/interceptors/]Doku[/url] wäre folgende Variante möglich:

    1. ...
    2. saveInterceptors.2 {
    3. class = Tx_MyPackage_Interceptor
    4. config {
    5. param = value
    6. }
    7. }
    8. ...

    Die Angabe Tx_MyPackage_Interceptor interpretiere ich so,
    daß du eine richtige Extension baust.
    Den Aufbau der Klasse und die nötigen Funktionen kannst du dir in den mitgelieferten Interceptors abschauen.

  • typonewbe typonewbe
    Sternenflotten-Admiral
    0 x
    197 Beiträge
    3 Hilfreiche Beiträge
    06. 05. 2015, 11:50

    Hallo Torsten,

    danke für deine schnelle Antwort.

    Ich lese mich da mal ein theoretisch hätte mein Ansatz aber funktionieren müssen ich habe folgendes probiert.

    1. saveInterceptors {
    2. 1 {
    3. class = Tx_Formhandler_Interceptor_Filtreatment
    4. config.fieldConf {
    5. distance.removeChars = USER
    6. distance.removeChars.userFunc = user_form->getDisciplineForPlainMail
    7. distance.removeChars.userFunc.staticPid = 10
    8. }
    9. }
    10. }

    leider ohne Erfolg es wird wieder die Liste ausgegeben.
    Laut Doku soll aber sowas möglich sein
    1. plugin.Tx_Formhandler.settings.initInterceptors.1.config.fieldConf {
    2. name.removeChars = %,&,/
    3. email.removeChars = TEXT
    4. email.removeChars.value = ,|<|>
    5. email.separator = |
    6. company = USER
    7. company.userFunc = user_myClass->user_getRemoveWords
    8. }

    Bei removeChars steht verwende ein cObject für eigene Manipulationen das habe ich getan. Aber 0 Wirkung.

    Ich probiere aber mal den Weg über einen eigenen Interceptor.

    Danke und einen schönen Tag noch

    Gruß typonewbe

  • jenses jenses
    Flash Gordon
    0 x
    3087 Beiträge
    106 Hilfreiche Beiträge
    07. 05. 2015, 09:37

    Hallo Dettlef,
    wer ist Torsten?

    Ich finde in der Doku nirgendwo ein Anwendungsbeispiel für die Nutzung einer USER function,
    dagegen die eigener Interceptors öfter mal.
    Der Blick in den Quellcode hilft auch öfter mal, wenn man wissen will,
    wie gewisse Zusammenhänge sind und warum manche Sachen nicht funktionieren, wie man sie sich zusammenreimt...

  • typonewbe typonewbe
    Sternenflotten-Admiral
    0 x
    197 Beiträge
    3 Hilfreiche Beiträge
    10. 05. 2015, 14:59

    Hallo jenses,

    entschuldige habe parallel noch einen anderen Post bearbeitet und dich aus versehen Torsten genannt man sollte nicht zwei Tabs mit Posts nebeneinander offen haben :).

    Nehmen wir den StdWrap Interceptor
    [url]http://www.typo3-formhandler.com/documentation/interceptors/interceptor-stdwrap/[/url]
    Dort wird doch eine Userfunction ausgeführt auf den Marker "company". Und genau so hatte ich es probiert mit dem saveInterceptor und als das nicht ging hab ich es mit dem "Filtreatment" probiert ohne Erfolg. Aber dein Tipp war super danke.
    Ich habe einen eigenen Finisher gebaut der die Werte manipulieren kann.
    Für alle die das selbe wollen wie ich hier mein Beitrag dazu:

    1. <?php
    2. class Tx_Formhandler_Finisher_ManipulateValues extends Tx_Formhandler_AbstractFinisher {
    3.  
    4. protected $cObj;
    5. /**
    6. * The main method called by the controller
    7. *
    8. * @return array The probably modified GET/POST parameters
    9. */
    10. public function process()
    11. {
    12. $this->cObj = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('tslib_cObj');
    13.  
    14. $submitedValues = $this->gp;
    15. $fieldSettings = $this->settings['fieldConf.'];
    16. $content = '';
    17. foreach($submitedValues as $fieldname => $fieldvalue) {
    18. foreach($fieldSettings as $tsField => $tsValues) {
    19. if(strval($fieldname) === strval($tsField)) {
    20. if(isset($fieldSettings[$tsField.'.'])) {
    21. $content = ''.$this->cObj->cObjGetSingle($fieldSettings[$tsField], $fieldSettings[$tsField.'.']);
    22. $this->gp[$tsField] = $content;
    23. }
    24. }
    25. }
    26. }
    27. return $this->gp;
    28. }
    29. }
    30. ?>

    Der TS Code muss wie folgt aussehen:

    1. plugin.Tx_Formhandler.settings.predef.contact {
    2. finishers {
    3. 1.class = Finisher_ManipulateValues
    4. 1.config {
    5. fieldConf {
    6. salutation = CASE
    7. salutation {
    8. key.data = GP:contact|salutation
    9. 0 = TEXT
    10. 0.value = Herr
    11. 1 = TEXT
    12. 1.value = Frau
    13. }
    14. name = TEXT
    15. name.value = {GP:firstname} {GP:middlename} {GP:lastname}
    16. name.insertData = 1
    17. }
    18. }
    19. }
    20. }

    Der TS Code zeigt nur einige Beispiele die damit möglich sind und ist sicherlich noch ausbaufähig.
    Für Feedback und Verbesserungsvorschläge bin ich offen.

    Gruß typonewbe

  • 1