Ergebnis 1 bis 18 von 18

Thema: Hook richtig anwenden

  1. #1
    Contao-Nutzer
    Registriert seit
    28.08.2017.
    Beiträge
    19

    Standard Hook richtig anwenden

    CONTAO Version: 3.5.9
    HOOK: myPrepareFormData


    Guten Tag,

    ich möchte Formulardaten nach POST bearbeiten, bevor sie in die Datenbank geschrieben werden.
    Der passende Hook scheint myPrepareFormData zu sein: https://docs.contao.org/books/api/ex...eFormData.html
    Den Hook an sich habe ich auf FTP in local/config/initconfig.php wie folgt eingetragen:
    $GLOBALS['TL_HOOKS']['prepareFormData'][] = array('MyClass', 'myPrepareFormData');

    Wo, in welches Verzeichnis platziere ich aber die Datei "MyClass.php"?


    Danke für eine Antwort.
    Geändert von dwkn (25.07.2018 um 16:45 Uhr)

  2. #2
    Contao-Fan
    Registriert seit
    16.11.2012.
    Ort
    Freiburg
    Beiträge
    539

    Standard

    Ich würde dir empfehlen das ganze als eine eigen Erweiterung zu machen.
    Grüße
    Alex

  3. #3
    Contao-Nutzer
    Registriert seit
    28.08.2017.
    Beiträge
    19

    Standard

    Zitat Zitat von 07alex07 Beitrag anzeigen
    Ich würde dir empfehlen das ganze als eine eigen Erweiterung zu machen.
    Obwohl es speziell dafür einen Hook gibt?


    Ich würde einfach gerne wissen wo man die Datei mit der Klasse zum Hook platzieren muss.
    Leider wird das im Handbuch (siehe Link vorheriger Post oben) nicht erklärt.

  4. #4
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.063
    Partner-ID
    10107

    Standard

    Zitat Zitat von dwkn Beitrag anzeigen
    Obwohl es speziell dafür einen Hook gibt?
    Hooks setzt du in Extensions um.

  5. #5
    Contao-Nutzer Avatar von spotbot2k
    Registriert seit
    26.06.2017.
    Beiträge
    65

    Standard

    07alex0 und Spooky haben Recht, eine programatische Modifikation gehört in eine Erweiterung. Sonst kann man ja alles wie in WP ins functions.php schreiben.

    https://de.wikipedia.org/wiki/Gottobjekt

    Nicht ganz dazu, aber die Erklärung passt

  6. #6
    Contao-Nutzer
    Registriert seit
    28.08.2017.
    Beiträge
    19

    Standard

    Zitat Zitat von spotbot2k Beitrag anzeigen
    07alex0 und Spooky haben Recht, eine programatische Modifikation gehört in eine Erweiterung. Sonst kann man ja alles wie in WP ins functions.php schreiben.

    https://de.wikipedia.org/wiki/Gottobjekt

    Nicht ganz dazu, aber die Erklärung passt

    Das heißt Hooks sollte man überhaupt nicht verwenden?

    Denn der Hook "prepareFormData" sollte ja eigentlich dazu da sein um Formulardaten in einer Klasse/Funtion abändern zu können bevor sie in die Datenbank geschrieben werden.
    https://docs.contao.org/books/api/ex...eFormData.html

    Verstehe nicht warum mir alle davon abraten die von Contao dafür vorgesehene Methode zu verwenden.

  7. #7
    Contao-Fan
    Registriert seit
    27.06.2012.
    Beiträge
    600

    Standard

    Doch du solltest den Hook in einer eigenen Extension verwenden

    Gesendet von meinem SM-G965F mit Tapatalk

  8. #8
    Contao-Nutzer
    Registriert seit
    28.08.2017.
    Beiträge
    19

    Standard

    Das hier sieht gut aus: Teste ich!
    https://www.marcosimbuerger.ch/conta...inrichten.html

  9. #9
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.063
    Partner-ID
    10107

    Standard

    Zitat Zitat von dwkn Beitrag anzeigen
    Das heißt Hooks sollte man überhaupt nicht verwenden?
    Doch natürlich. Warum denkst du, dass du die nicht vewenden solltest?



    Zitat Zitat von dwkn Beitrag anzeigen
    Denn der Hook "prepareFormData" sollte ja eigentlich dazu da sein um Formulardaten in einer Klasse/Funtion abändern zu können bevor sie in die Datenbank geschrieben werden.
    https://docs.contao.org/books/api/ex...eFormData.html.
    Der richtige Hook für dein Vorhaben ist übrigens storeFormData.



    Zitat Zitat von dwkn Beitrag anzeigen
    Verstehe nicht warum mir alle davon abraten die von Contao dafür vorgesehene Methode zu verwenden.
    Niemand macht das.

  10. #10
    Contao-Nutzer
    Registriert seit
    28.08.2017.
    Beiträge
    19

    Standard

    Der richtige Hook für dein Vorhaben ist übrigens storeFormData.

    Danke Spooky, storeFormData ist der richtige Hook und er wird nun auch ausgeführt aber zeigt keine Veränderung der Variable in der DB.
    Im array mittels print_r wird auch meine modifizierte Variable angezeigt aber in der Datenbank sehe ich nach wie vor den unveränderten Wert.
    Hast Du eine Idee?



    public function myStoreFormData($arrSet, $objForm)
    {

    $arrSet['arrival'] = strtotime($arrSet['arrival']);

    print_r($arrSet); // debug only -> wurde selbstverständlich auch ohne diese Zeile getestet
    exit(); // debug only -> wurde selbstverständlich auch ohne diese Zeile getestet

    return $arrSet;

    }
    Geändert von dwkn (30.07.2018 um 15:57 Uhr)

  11. #11
    Contao-Fan
    Registriert seit
    27.06.2012.
    Beiträge
    600

    Standard

    Versuch es mal mit &$arrSet in der function

    Gesendet von meinem SM-G965F mit Tapatalk

  12. #12
    Contao-Nutzer
    Registriert seit
    28.08.2017.
    Beiträge
    19

    Standard

    Zitat Zitat von valentin_ Beitrag anzeigen
    Versuch es mal mit &$arrSet in der function

    Gesendet von meinem SM-G965F mit Tapatalk
    Danke das funktioniert nun für die Datenbank. Aber nun steht in der Bestätigungs-Email des Formulars auch die bearbeitete Variable anstatt der direkten unbearbeiteten Variable.

    unbearbeitete Variable = formatiertes Datum (für Menschen lesbar z.B in E-Mail)
    bearbeitete Variable = Unix timestamp (zur Weiterverarbeitung in Datenbank)

  13. #13
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.063
    Partner-ID
    10107

    Standard

    Wenn du das auch im Email anderes haben möchtest, dann ist der Richtige Hook prepareFormData.

  14. #14
    Contao-Nutzer
    Registriert seit
    28.08.2017.
    Beiträge
    19

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Wenn du das auch im Email anderes haben möchtest, dann ist der Richtige Hook prepareFormData.
    In der E-Mail brauche ich es unbearbeitet und NUR für die Speicherung in der Datenbank soll die Variable von einem formatierten Datum (gewählt mittels DatePicker) in einen Unix-Timestamp gewandelt werden.

  15. #15
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.063
    Partner-ID
    10107

    Standard

    storeFormData wird erst nach dem Email Versand ausgeführt. In der Email sollte daher der Original Wert sein.

  16. #16
    Contao-Nutzer
    Registriert seit
    28.08.2017.
    Beiträge
    19

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    storeFormData wird erst nach dem Email Versand ausgeführt. In der Email sollte daher der Original Wert sein.
    Genau SOLLTE. Aber ist es leider nicht.


    Code:
        public function myStoreFormData(&$arrSet, $objForm)
        {
    
            $arrSet['arrival'] = strtotime($arrSet['arrival']);
            return $arrSet;
    
        }

  17. #17
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.063
    Partner-ID
    10107

    Standard

    Auch das &$arrSet ist eigentlich nicht notwendig. Welche Extensions verwendest du?

  18. #18
    Contao-Nutzer
    Registriert seit
    28.08.2017.
    Beiträge
    19

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Auch das &$arrSet ist eigentlich nicht notwendig. Welche Extensions verwendest du?


    Vielen Dank. Jetzt läuft alles wie es soll.
    Bei der letzten Änderung hatte der Schritt (Cache leeren/Autoloader neu erstellen) gefehlt.

    Am Ende war storeFormData der richtige Hook dafür, da er nach E-Mailversand und vor dem Speichern angewandt wird.

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
  •