Ergebnis 1 bis 16 von 16

Thema: processEfgFormData

  1. #1
    Alter Contao-Hase
    Registriert seit
    04.02.2010.
    Beiträge
    1.366

    Standard processEfgFormData

    Hi,
    ich versuche nach Absenden eines Efg-Formulars auf die Daten zu reagieren, dazu hab ich den HOOK: processEfgFormData
    eingebaut. Dieser wird auch aufgerufen. Ich teste das einfach mit einem
    PHP-Code:
    echo "drin";die; 
    Die Seite steht dann still, aber die Mail wird trotzdem versendet.

    Ich suche quasi einen HOOK, mit dem ich die Form-Data verändern kann, bevor die Mail gesendet wird.

    Kann mir jemand helfen?

    Danke und Gruß
    Michael

  2. #2
    Contao-Urgestein Avatar von Tim G
    Registriert seit
    13.02.2010.
    Ort
    Lübeck
    Beiträge
    2.210
    User beschenken
    Wunschliste

    Standard

    processEfgFormData erwartet einen Array als return mit den Daten

    wenn es ohne efg sein muss, dann im hook die POST Variablen überschreiben
    http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

  3. #3
    Alter Contao-Hase
    Registriert seit
    04.02.2010.
    Beiträge
    1.366

    Standard

    Hi,
    ja, das weiß ich.

    PHP-Code:
    class EfgCallbacks extends Backend
    {
        public function 
    setRecipient($arrSubmitted$arrFiles$intOldId$arrForm)
        {
            echo 
    "drin";die;            
            return 
    $arrSubmitted;
        }

    Das ist mein Grundgerüst. Die Mail wird aber trotzdem versendet. Obwohl da ein "die;" steht. Ich müßte
    aber Einfluss nehmen auf die übergebenen Arrays.

    Noch Ideen?

    Danke

  4. #4
    Alter Contao-Hase
    Registriert seit
    04.02.2010.
    Beiträge
    1.366

    Standard

    Hallo,

    ich versuch´s nochmal zu erklären, ich muss auf die Formulardaten vor Versenden reagieren. Speziell
    geht es um verschiedene Empfänger je nach Selectmenü-Auswahl.

    Dazu hab ich einen HOOK eingebaut, der auch aufgerufen wird. ABER: die Mail wird bereits vorher versendet. Das heißt,
    ich kann die Form-Daten ändern wie ich will, die Mail ist schon weg.

    Ich möchte reagieren, BEVOR die Mail verschickt wird.

    Danke nochmal und Gruß
    Michael

  5. #5
    Contao-Urgestein Avatar von Tim G
    Registriert seit
    13.02.2010.
    Ort
    Lübeck
    Beiträge
    2.210
    User beschenken
    Wunschliste

    Standard

    Du kannst doch sämtliche Werte im $arrSubmitted überschreiben.
    Möchtest Du die Empfänger neusetzen, kannst Du innerhalb dieses Hooks auch den $arrForm Array manipulieren. Die Änderungen werden akzeptiert.

    Ich wollte man nel kleines Tutorial dafür schreiben wie man z.B. aus nem Select die E-Mail-Empfänger setzt, aber wie das immer ist...

    Das sollte dir helfen.
    PHP-Code:
    $arrEmails = array('hallo@hallo.de','hallo2@nochmal-hallo.de');
    $arrForm['formattedMailRecipient'] = implode(','$arrEmails); 

    Wenn Du es richtig knallen lassen willst während Du entwickelst, solltest Du eher richtige Fehlermeldungen produzieren, dann steht wirklich alles
    PHP-Code:
    throw new Exception('--- STOP ---'); 
    Gerade bei Formularen ist das wichtig, weil man die anders eigentlich nicht debuggen kann, ausser alles blockieren
    Geändert von Tim G (27.08.2013 um 15:36 Uhr)
    http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

  6. #6
    Contao-Urgestein
    Registriert seit
    06.07.2009.
    Beiträge
    1.500

    Standard

    Zudem thema hatte ich 2011 mich lange beschäftigt.

    Und der EFG bietet da ne Menge optionen...

    https://community.contao.org/de/show...l=1#post160878

    und einen anderen Fall

    https://community.contao.org/de/show...l=1#post166549

  7. #7
    Alter Contao-Hase
    Registriert seit
    04.02.2010.
    Beiträge
    1.366

    Standard

    Hi,
    ja, das hab ich ja probiert, das Array $arrForm zu überschreiben. Das geht aber nicht. Er schickt trotzdem an
    die Adresse, die in den Einstellungen hinterlegt ist. Hier nochmal der komplete Code:

    PHP-Code:
    <?php
     
    class EfgCallbacks extends Backend
    {
        public function 
    setRecipient($arrPost, &$arrForm$arrFiles)
        {
            
    // Einschraenkung auf das Formular
            
    if ($arrPost['FORM_SUBMIT'] == 'auto_form_1')
            {
                
    // überschreiben des Wertes von 'Empfänger-Adresse' mit dem Wert aus einem Fomularfeld
                
    $arrForm['recipient'] = $arrPost['Abteilung'];
            }    
        }
    }
    ?>

  8. #8
    Contao-Urgestein
    Registriert seit
    06.07.2009.
    Beiträge
    1.500

    Standard

    Also ich hoffe mal das die Callsbacks von 2011 noch gelten...

    Teste doch mal den code...

    PHP-Code:
     <?php
     
    // $arrSubmitted enthalt die POST-Werte
    // $arrFiles ggf. Datei-Uploads
    // $intOldId die ID des bearbeiteten Datensatzes, im Falle von Frontend-Bearbeitung
    // $arrForm enthaelt die 'Formular-Konfiguration'

    //Registrieren des Callbacks in system/config/dcaconfig.php - $GLOBALS['TL_HOOKS']['processEfgFormData']['callback_01'] = array('EfgCallbacks', 'setRecipient');
     
    class EfgCallbacks extends Backend
    {

        public function 
    setRecipient($arrSubmitted$arrFiles$intOldId, &$arrForm)
        {

    // Einschraenkung auf das Formular
            
    if ($arrSubmitted['FORM_SUBMIT'] == 'auto_form_1')
            {
                
    // Überschreiben des Wertes von 'Empfänger-Adresse' mit dem Wert aus einem Fomularfeld 
          
        
    $arrSubmitted['recipient'] = $arrSubmitted['Abteilung'] ;
            }
                         
             return 
    $arrSubmitted;
            }
        }
    ?>

  9. #9
    Contao-Urgestein
    Registriert seit
    06.07.2009.
    Beiträge
    1.500

    Standard

    Es könnte natürlich auch folgendes sinn machen. Je nach dem wo sich das Feld Recipient befindet

    PHP-Code:
    <?php
     
    // $arrSubmitted enthalt die POST-Werte
    // $arrFiles ggf. Datei-Uploads
    // $intOldId die ID des bearbeiteten Datensatzes, im Falle von Frontend-Bearbeitung
    // $arrForm enthaelt die 'Formular-Konfiguration'

    //Registrieren des Callbacks in system/config/dcaconfig.php - $GLOBALS['TL_HOOKS']['processEfgFormData']['callback_01'] = array('EfgCallbacks', 'setRecipient');
     
    class EfgCallbacks extends Backend
    {

        public function 
    setRecipient($arrSubmitted$arrFiles$intOldId, &$arrForm)
        {

    // Einschraenkung auf das Formular
            
    if ($arrSubmitted['FORM_SUBMIT'] == 'auto_form_1')
            {
                
    // Überschreiben des Wertes von 'Empfänger-Adresse' mit dem Wert aus einem Fomularfeld 
          
        
    $arrForm['recipient'] = $arrSubmitted['Abteilung'] ;
            }
                         
             return 
    $arrForm;
            }
        }
    ?>

  10. #10
    Contao-Urgestein Avatar von Tim G
    Registriert seit
    13.02.2010.
    Ort
    Lübeck
    Beiträge
    2.210
    User beschenken
    Wunschliste

    Standard

    Oben steht die Lösung in meinem Post! https://community.contao.org/de/show...l=1#post283602

    Das Feld heisst für den EFG nun mal formattedMailRecipient und erwartet eine kommegetrennte Liste an E-Mail-Adressen.

    Im Hook überschreibt man es so: $arrForm['formattedMailRecipient'] = 'email1@email.de,email2@email.de';
    oder wie oben mit implode und alle Werte in einem Array.
    Woher Ihr die E-Mail-Adressen holt ist relativ egal. Ich hab das immer in Kombination mit der Katalog-Merkliste genutzt.

    Kleiner Hinweis, nachdem ich gerade die anderen Post gesehen habe. Die Datei mit den Funktionen und die config.php sollte nicht im efg Verzeichnis gespeichert werden, sondern in einem eigenen Verzeichnis im Module Ordner. Spätestens bei einem efg update würde sie sonst rausfliegen.
    [myEfgCallbacks]
    -- [config]
    --- config.php
    -- EfgCallbacks.php
    Geändert von Tim G (27.08.2013 um 16:18 Uhr)
    http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

  11. #11
    Alter Contao-Hase
    Registriert seit
    04.02.2010.
    Beiträge
    1.366

    Standard

    Hi,

    diese Variable hat auch nicht funktioniert: $arrForm['formattedMailRecipient']
    Die ursprünglich im Backend eingesetzte Mail-Adresse steht auch NUR in der Variable $arrForm['recipient']. Und sonst nirgends.

    Ich hab sowohl den processFormData-Hook verwendet als auch den processEfgFormData.
    Bei beiden wird die Empfängeradresse nicht getauscht. Die Mail geht immer an den im Backend eingestellten Empfänger.

    Inzw. hab ich formrecipient installiert und dann kann man einen Insert-Tag nehmen. Das geht jetzt. Hätte mich aber interessiert, warum
    der Hook nicht greift.

    Gruß
    Michel

  12. #12
    Contao-Urgestein Avatar von Tim G
    Registriert seit
    13.02.2010.
    Ort
    Lübeck
    Beiträge
    2.210
    User beschenken
    Wunschliste

    Standard

    Strange
    Das geht 100pro Hab's auf zig Seiten gemacht mit n-vielen E-Mail-Adressen aus catalog-Einträgen.
    Aber ist doch gut, wenn Du jetzt ne Lösung hast.
    http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

  13. #13
    Alter Contao-Hase
    Registriert seit
    04.02.2010.
    Beiträge
    1.366

    Standard

    Hi, eine Frage hätt ich noch, evtl. liegts daran:
    efg_email_versenden.jpg

    Da gibt es 2 zwei Möglichkeiten, die Mail zu versenden.

  14. #14
    Contao-Nutzer
    Registriert seit
    14.03.2012.
    Ort
    Berlin
    Beiträge
    225

    Standard

    Da es sich um einen EFG Hook handelt, musst du auch den unteren nehmen

  15. #15
    Alter Contao-Hase
    Registriert seit
    04.02.2010.
    Beiträge
    1.366

    Standard

    Hi,

    ok, aber wie versende ich dann alle Daten des Formulars ohne die alle einzeln in das Textfeld einzutragen?

    Bei der oberen Variante werden ja alle Formular-Daten an den Empfänger verschickt.

    Grüßla
    Michel

  16. #16
    Contao-Nutzer
    Registriert seit
    22.02.2011.
    Beiträge
    20

    Standard

    Auch wenn der Beitrag schon etwas älter ist, hinterlässt er ein paar Fragen.

    TimG sagt, mit diesem Hook kann man den Empfänger neu setzten. Er erklärt das auch ganz oben, wie der Empfänger neu gesetzt wird.
    Lengen1971 sagt, es geht nicht. Der Empfänger wird nicht neu gesetzt.

    Beide haben Recht.

    Wenn man vergisst, die Variable $arrSubmitted zurückzugeben, dann wird der Empfänger tatsächlich nicht neu gesetzt (soweit stimmt das von Lengen1971). Sobald jedoch das $arrSubmitted zurückgegeben wird, dann wird auch der Empfänger neu gesetzt.

    Also, für alle Code-Leser hier draussen, das ganze mal ein bischen mehr PHP

    PHP-Code:
    /**
     * things to do before send the e-mail
     * 
     * @param $arrSubmitted - enthalt die POST-Werte
     * @param $arrFiles  - ggf. Datei-Uploads
     * @param $intOldId - die ID des bearbeiteten Datensatzes, im Falle von Frontend-Bearbeitung 
     * @param $arrForm  - enthaelt die 'Formular-Konfiguration'
     * @param $arrLabels
     */
    public function doBeforeSendEMail($arrSubmitted$arrFiles$intOldId, &$arrForm)
    {
         
    $arrForm['formattedMailRecipient'] = 'foo@bar.com';
         return 
    $arrSubmitted// <- dieses return ist wichtig, da ansonsten nichts vom Hook übernommen wird

    So funktioniert's

    Grüße von der Heimat

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •