Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 40 von 48

Thema: Formular Submit: wie kann man ein Datum (Calendarfield Wert) als Timestamp posten?

  1. #1
    Contao-Nutzer
    Registriert seit
    14.12.2009.
    Beiträge
    7

    Frage Formular Submit: wie kann man ein Datum (Calendarfield Wert) als Timestamp posten?

    Moin,

    kennt jemand, wie man Calendarfield Werte on Formular Submit als Timestamp posten kann?

    Ich versuche neue Catalog Items über FE Formular zu erstellen und direkt in DB abzuspeichern.
    Alle Werte bis auf Datum werden korrekt abgespeichert: das Datum wird in DB als Timestamp erwartet, während Calendarfield String Werte liefert.

    Im Voraus Danke für schnelle Hilfe.

  2. #2
    Contao-Nutzer
    Registriert seit
    14.12.2009.
    Beiträge
    7

    Standard

    Hallo Leo,

    ich suche nach einer sauberen und einfachen Möglichkeit das Datum String aus dem Formular als Timestamp in die DB zu posten.

    Also (releasedate: 1260748800) statt (releasedate: 14.12.2009).

    Muss man dafür einen HOOK schreiben? Oder wie geht es am besten?

  3. #3
    Contao-Fan Avatar von Sarvo
    Registriert seit
    22.07.2009.
    Ort
    Aschaffenburg
    Beiträge
    334

    Standard

    Hi

    mit mktime() machst du doch genau das. Du wandelst einen String in einen UNIX TIMESTAMP um.

    schau dir mal die Referenz an

    Du musst nur dein Datum von xx.xx.xxxx in xx,xx,xxxx (mit Komma getrennt) umwandeln.

    Liebe Grüße

    Sarvo

  4. #4
    Contao Core-Team
    Association Vorstand
    Avatar von andreas.schempp
    Registriert seit
    15.06.2009.
    Ort
    Lyss
    Beiträge
    5.613
    Partner-ID
    8667
    Contao-Projekt unterstützen

    Support Contao

    Standard

    mktime() nützt doch nichts wenn er den Wert direkt in die DB schreiben will...

    Womit arbeitest du denn? Mit dem Core Formulargenerator oder mit der EFG-Erweiterung?

    Grundsätzlich, hast du die Eingabeprüfung auf Datum gesetzt (bzw. ist das überhaupt möglich)? Möglicherweise lässt sich das aktuell auch gar nicht machen, wäre aber sicher erweiterbar. mktime() ist ausserdem der falsche Ansatz, es sollte die TYPOlight Date-Parsing-Funktion verwendet werden (u.a. Date-Klasse).
    terminal42 gmbh
    Wir sind Contao Premium-Partner! Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.
    Hilfe für Isotope eCommerce kann man auch kaufen: Isotope Circle

  5. #5
    Contao-Nutzer
    Registriert seit
    14.12.2009.
    Beiträge
    7

    Standard

    Hallo Andreas,

    ich benutze für das Formular die EFG Erweiterung.

    Die Eingabeprüfung fürs Datumfeld findet auch statt: es wird nur ein Zukunftsdatum erlaubt. Eine zusätzliche Eingabeprüfung wird noch benötigt, damit Bewerbungsfristdatum immer kleiner als Releasedate ist: es gibt zwei Calendarfields im Formular.

    Andreas, wo genau kann eigenltich die TYPOlight Date-Parsing-Funktion verwendet werden? Muss man Callback Hooks für Formularvalidierung nutzen?

  6. #6
    Contao Core-Team
    Association Vorstand
    Avatar von andreas.schempp
    Registriert seit
    15.06.2009.
    Ort
    Lyss
    Beiträge
    5.613
    Partner-ID
    8667
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Der Callback-Hook wird dir - insbesondere im Zusammenhang mit dem EFG - nicht viel nützen. Allerdings weis ich dass der EFG das Calendarfield explizit behandelt, ich weis allerdings nicht mehr was da gemacht wird. Schau dir doch mal den Code der EFP.php an, und such nach "calendarfield". Ausserdem findest du in der ModulePersonalData ein Beispiel, wie das Format geparst und in Timestamp umgewandelt wird.
    terminal42 gmbh
    Wir sind Contao Premium-Partner! Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.
    Hilfe für Isotope eCommerce kann man auch kaufen: Isotope Circle

  7. #7
    Contao-Nutzer
    Registriert seit
    14.12.2009.
    Beiträge
    7

    Standard

    Moin zusammen.

    @Andreas: Danke nochmal.

    Also eine schnelle Lösung (wie man Datumseingabe als timestamp in DB abspeichern kann) ist unten zu sehen.

    Ist leider update kritisch. Weiß jemand, wie man das update sicher machen könnte? Vielleicht eine elegantere Lösung?

    Im Voraus Danke.

    ----------------------------------------------------------
    Datei: system/modules/frontend/Form.php
    Funktion: protected function processFormData($arrSubmitted)
    Update Zeile 393:
    Code:
    //alte Zeile: 
    $arrSet[$k] = $v;
    //neue Zeile: 
    $arrSet[$k] = ($k == 'releasedate' OR $k == 'deadline') ? strtotime($v) : $v;
    ------------------------------------------------------------

  8. #8
    Contao Core-Team
    Association Vorstand
    Avatar von andreas.schempp
    Registriert seit
    15.06.2009.
    Ort
    Lyss
    Beiträge
    5.613
    Partner-ID
    8667
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Sorry, aber diese Variante ist wirklich sehr schlecht!
    1. nicht update-sicher
    2. funktioniert es nicht mit allen Datums-Formaten

    ev. mit dem validateFormField Hook?
    terminal42 gmbh
    Wir sind Contao Premium-Partner! Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.
    Hilfe für Isotope eCommerce kann man auch kaufen: Isotope Circle

  9. #9
    Contao Core-Team
    Association Vorstand
    Avatar von andreas.schempp
    Registriert seit
    15.06.2009.
    Ort
    Lyss
    Beiträge
    5.613
    Partner-ID
    8667
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Funktioniert aber nur mit bestimmten Datumsformaten...
    terminal42 gmbh
    Wir sind Contao Premium-Partner! Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.
    Hilfe für Isotope eCommerce kann man auch kaufen: Isotope Circle

  10. #10
    Contao-Nutzer
    Registriert seit
    22.06.2009.
    Ort
    St.Pauli
    Beiträge
    217

    Standard

    .. und setzt außerdem voraus, dass die entsprechenden Kenntnisse, Zugriffsmöglichkeiten und Rechte bestehen, um den Trigger zu setzen.

    Bei einem Hook stellt sich allerdings die Frage, wo registrieren und wohin mit der Klasse, wenn kein eigenes Modul vorhanden ist...


    cheers
    Antipitch
    "Some people, when confronted with a problem, think 'I know, I’ll use regular expressions.' Now they have two problems." Jamie Zawinski

  11. #11
    Contao Core-Team
    Association Vorstand
    Avatar von andreas.schempp
    Registriert seit
    15.06.2009.
    Ort
    Lyss
    Beiträge
    5.613
    Partner-ID
    8667
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Na in einem neuen Modul halt. Ich nenn das jeweils "z_custom"
    terminal42 gmbh
    Wir sind Contao Premium-Partner! Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.
    Hilfe für Isotope eCommerce kann man auch kaufen: Isotope Circle

  12. #12
    Contao-Nutzer
    Registriert seit
    22.06.2009.
    Ort
    St.Pauli
    Beiträge
    217

    Standard

    Ach so

    Nee, ist schon klar, aber find ich es immer nicht so schick, nur für die Array-Erweiterung und 'ne einzelne Klasse ein Modul anzulegen. Irgendwann werd ich doch nochmal ein Modul für Hook-Registrierung und Klassenspeicherung übers BE machen.

    @ Apollo: Sorry für das Geschwafel. Beide Lösungswege sind möglich. Ich persönlich würde es so machen wie Andreas. Wenn du dabei Fragen hast, frag


    cheers
    Antipitch
    "Some people, when confronted with a problem, think 'I know, I’ll use regular expressions.' Now they have two problems." Jamie Zawinski

  13. #13
    Contao-Nutzer
    Registriert seit
    03.05.2010.
    Ort
    Arneburg
    Beiträge
    55

    Standard

    andreas, du hast geschrieben

    Na in einem neuen Modul halt. Ich nenn das jeweils "z_custom"
    meinst du ein Modul was die efg ersetzt oder eins um das Datum als timestamp zu speichern?

    oder hast du noch eine Möglichkeit um mit dem validateFormField hook an die Sache zu kommen?

    Gruß Jörg

  14. #14
    Contao Core-Team
    Association Vorstand
    Avatar von andreas.schempp
    Registriert seit
    15.06.2009.
    Ort
    Lyss
    Beiträge
    5.613
    Partner-ID
    8667
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Meine Aussage war eine Antwort auf folgende Frage

    Bei einem Hook stellt sich allerdings die Frage, wo registrieren und wohin mit der Klasse, wenn kein eigenes Modul vorhanden ist...
    terminal42 gmbh
    Wir sind Contao Premium-Partner! Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.
    Hilfe für Isotope eCommerce kann man auch kaufen: Isotope Circle

  15. #15
    Contao-Nutzer
    Registriert seit
    03.05.2010.
    Ort
    Arneburg
    Beiträge
    55

    Standard

    vielen Dank Andreas,

    ich habe das gleiche Problem wie apollo aus dem 1. Beitrag.
    ich möchte die Variante mit dem Hook einbinden, da ich den Trigger in MySql nicht setzen möchte bzw kann.

    Aber wenn ich einen Hook mit validateFormField erstellen, wird dieser auch ausgeführt.
    Nur ich kann die Daten $arrSubmitted nicht überschreiben. Oder besser die Variaten die ich getestet habe, haben nicht zu Ziel geführt.

    Was muss ich machen damit ich das Datums aus meinem Form in $arrSubmitted bekomme?

    denn im Form.php werden in Zeile 404 die Felder geladen und dann in die DB geschrieben.

    Im Voraus Danke

  16. #16
    Contao-Nutzer
    Registriert seit
    03.05.2010.
    Ort
    Arneburg
    Beiträge
    55

    Standard

    für alle die es interessiert, so habe ich es jetzt mit dem hook gelöst.
    PHP-Code:
    class jf_Class_erledigt_datum extends Controller
    {
        public function 
    jfValidateFormField(Widget $objWidget$intId)
        {
     
            if (
    $objWidget instanceof FormCalendarField)
            {
                if (
    $intId == auto_form_8)
                {
                    if (
    $objWidget->name == 'zu_erl_bis_Datum')
                    {
                        if (
    strtotime($objWidget->value) !== false)
                        {
                        
    $objWidget->value strtotime($objWidget->value);
                                
                        }
                    }
                }
            }

            return 
    $objWidget;

        }


  17. #17
    Contao Core-Team
    Association Vorstand
    Avatar von andreas.schempp
    Registriert seit
    15.06.2009.
    Ort
    Lyss
    Beiträge
    5.613
    Partner-ID
    8667
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Wird der Wert nicht automatisch konvertiert, wenn du die Eingabeprüfung auf "Datum" setzt? Falls nicht automatisch, solltest du bei deiner Routine nicht besser diesen Wert prüfen?
    terminal42 gmbh
    Wir sind Contao Premium-Partner! Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.
    Hilfe für Isotope eCommerce kann man auch kaufen: Isotope Circle

  18. #18
    Contao-Nutzer
    Registriert seit
    03.05.2010.
    Ort
    Arneburg
    Beiträge
    55

    Standard

    hallo andreas,
    der Wert wird auch geprüft. Nur der Wert wird beim Feldtyp cardfield im Format '01.04.2010' in die DB geschrieben. Der Typ in der DB ist Varchar(10). Soweit ist es auch ok. Nur in Verbindung mit der Erweiterung efg. (listview) als Tabelle lassen sich die Felder (datum) nur als varchar sortieren und nicht als Datum. Daher wandle ich das geprüfte Datum in timestamp um und kann so Datumsfelder sortieren.
    Ich hätte sicher auch in der DB die Felder mit einem trigger umwandeln können wie leo es hier im Beitrag geschieben hat.

    Gruß Jörg

    PS. es geht sicher auch einfacher aber ich fange gerade mit Contao an

  19. #19
    Contao Core-Team
    Association Vorstand
    Avatar von andreas.schempp
    Registriert seit
    15.06.2009.
    Ort
    Lyss
    Beiträge
    5.613
    Partner-ID
    8667
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Ich sehe gerade dass du meine Erweiterung einsetzt
    Allerdings denke ich, der Wert sollte nicht immer konvertiert werden, da z.B. im Email sonst nur der Timestamp stehen würde.

    Zur PHP-Funktion, du solltest die Core-Funktionen zur Konvertierung verwenden, nicht strtotime. Schau dir z.B. die system/modules/registration/ModuleRegistration.php an, wie dort ein Datum (Geburtsdatum) konvertiert wird.
    terminal42 gmbh
    Wir sind Contao Premium-Partner! Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.
    Hilfe für Isotope eCommerce kann man auch kaufen: Isotope Circle

  20. #20
    Contao-Nutzer
    Registriert seit
    03.05.2010.
    Ort
    Arneburg
    Beiträge
    55

    Standard

    bei der Mail hast du Recht. Dort wandle ich das Datum vorher wieder in das tt.mm.yyyy Format um. mit hilfe von (file::xxx.php)

    system/modules/registration/ModuleRegistration.php
    schaue ich mir gleich mal an.

    Danke

  21. #21
    Contao-Nutzer Avatar von hartlrobert
    Registriert seit
    07.01.2010.
    Beiträge
    144

    Standard

    Gibts hier schon eine nachbaubare Funktion etc.?
    Ich sehe aus meinen Suchergebnissen, dass viele das gleiche Problem haben.

    Ziel ist immer über Frontend-Formular direkt Daten in die Datenbank (meist Kalender Erweiterung) zu bringen und hierbei ein Datum als timestamp abzuspeichern (zumindest in der DB).

  22. #22
    Contao-Nutzer Avatar von hartlrobert
    Registriert seit
    07.01.2010.
    Beiträge
    144

    Standard

    Leider gab es bis jetzt keine Reaktion, auch habe ich keine Lösung anderswo gefunden.
    Wenn sich ein Entwickler bereit erklärt, das zu lösen, bitte PN, ich bezahle das.

  23. #23
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.467
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    Also aus meiner Sicht sollte das doch total easy möglich sein?

    PHP-Code:
    // timestamp vom 20.10.2011
    $objDate = new Date('20.10.2011''d.m.Y');
    $intTimestamp $objDate->tstamp
    Fertig
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

  24. #24
    Contao-Nutzer Avatar von hartlrobert
    Registriert seit
    07.01.2010.
    Beiträge
    144

    Standard

    Danke Toflar,
    soweit so gut.

    Wie schafft man es jetzt, dass im Frontend-Formular das Element calenderfield den timestamp in die Datenbank schreibt anstatt des Klartextdatums, das der Besucher auswählt/ eingibt?
    Dann ists gelöst.

  25. #25
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.467
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    Mit dem processFormData Hook wie oben schon beschrieben
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

  26. #26
    Contao-Nutzer Avatar von hartlrobert
    Registriert seit
    07.01.2010.
    Beiträge
    144

    Standard

    Super, danke!

  27. #27
    Contao-Fan Avatar von Hauge
    Registriert seit
    31.01.2010.
    Beiträge
    643

    Standard tstamp speichern?

    Ich hole nun auch diesen Thread mal nach vorne...
    Soweit ich weiß, konnte man - zwischenzeitlich - über das Calendarfield auch den tstamp in der db speichern oder irre ich da?

    Zumindest hatte es mal zeitweise funktioniert.

    Habe gerade festgestellt, dass dies nicht mehr klappt...
    2.11.4

    Gibt es hierzu eine praktikable Lösung - sprich stehe ich auf dem Schlauch?

    oder muss dieses Thema doch nochmals von vorne aufgerollt werden - (sofern Bedarf besteht, den tstamp auch in der DB speichern zu können)

  28. #28
    Contao-Nutzer
    Registriert seit
    20.02.2012.
    Beiträge
    32

    Standard

    Hallo,

    ich habe vor einigen Tagen ebenfalls vor dem Problem gehangen und diesen Thread gefunden.

    Wie hier beschrieben handelt es sich nicht, und daher schreibe ich meinen Lösungsvorschlag hier rein, um den 'processFormData' Hook, sondern um den 'storeFormData' Hook. Dieser wird vor dem Speichern in die DB aufgerufen und erlaubt die Manipulation der Daten. Hilfe habe ich hier auch im IRC-Channel erhalten.

    Registrierung des Hooks in eigener Erweiterung (oder in einer z_custom Erweiterung):

    /system/name_erweiterung/config/config.php

    PHP-Code:
    $GLOBALS['TL_HOOKS']['storeFormData'][] = array('yourModule''storeFormData'); 
    /system/name_erweiterung/modules/yourModule.php

    PHP-Code:
    public function storeFormData($arrSet)
    {
        
    $objDate = new \Date($arrSet['dienstdatum']);
        
    $arrSet['dienstdatum'] = $objDate->tstamp;      
        return 
    $arrSet;        

    Das funktioniert in einem Contao 3.0.6 System. Mein DateFormat ist d.m.Y

    VG
    Patrick

  29. #29
    Contao-Fan Avatar von Hauge
    Registriert seit
    31.01.2010.
    Beiträge
    643

    Standard

    hat das jemand schon mit 2.11 getestet?

  30. #30
    Contao-Fan Avatar von Hauge
    Registriert seit
    31.01.2010.
    Beiträge
    643

    Standard tstamp mit calendarfield speichern funktioniert nicht

    Hallo zusammen - also iwi will dat nicht so wie ich das gerne hätte:
    Eckdaten:
    • Contao 2.11.12
    • calendarfield 1.4.1 stable 4

    Code:
    system/modules/z_maketstamp/config/config.php:
    Code:
    <?php if (!defined('TL_ROOT')) die('You can not access this file directly!');
    $GLOBALS['TL_HOOKS']['storeFormData'][] = array('maketstamp', 'storeFormData');   
    ?>
    system/modules/z_maketstamp/maketstamp.php:
    Code:
    <?php if (!defined('TL_ROOT')) die('You can not access this file directly!');
    class maketstamp extends Frontend
    {
        public function storeFormData($arrSet)
        {  
            if ($arrForm['id'] != 16)//verwende Formular 16
            {
            $objDate = new \Date($arrSet['mp_date']);
            $arrSet['mp_date'] = $objDate->tstamp;      
            return $arrSet;
            }
        }
    }
    Der tstamp wird im Formular 16 auch korrekt abgespeichert.
    Jetzt hab ich allerdings das Problem, dass andere Formulare nicht mehr funzen.
    Es kommt folgende Fehlermeldung:

    Fatal error: Uncaught exception Exception with message Query error: Unknown column 'mp_date' in 'field list' (INSERT INTO mm_gerichte (tstamp, category, gericht, note, mp_date) VALUES ('1382188974', '4', 'x', '1', -3600)) thrown in …/system/libraries/Database.php on line 686
    Eigentlich müsste der Code in etwa so lauten:
    Code:
    <?php if (!defined('TL_ROOT')) die('You can not access this file directly!');
    class maketstamp extends Frontend
    {
        public function storeFormData($arrSet)
        {  
            if ($arrForm['id'] != 16)
            {
                return;
            }
            $objDate = new \Date($arrSet['mp_date']);
            $arrSet['mp_date'] = $objDate->tstamp;      
            return $arrSet;
            
        }
    }
    allerdings krieg ich dann folgende Fehlermeldung:
    Warning: Invalid argument supplied for foreach() in …/system/libraries/Database.php on line 729
    leider komm ich da nicht dahinter - eigentlich hätte ich ja die Bedingung, dass der Hook nur durchgeführt werden soll, wenn ich Form#16 verwende.

    Kann mir evtl. jemand behilflich sein?
    Geändert von Hauge (19.10.2013 um 15:14 Uhr)

  31. #31
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.467
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    Du musst wohl "$arrSet" immer zurückgeben
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

  32. #32
    Contao-Fan Avatar von Hauge
    Registriert seit
    31.01.2010.
    Beiträge
    643

    Computer

    oh my god!

  33. #33
    Contao-Nutzer
    Registriert seit
    01.10.2012.
    Ort
    München
    Beiträge
    4

    Standard

    Hallo zusammen,

    ich glaube, dass ich gerade etwas auf dem Schlauch stehe :-) Und zwar: Wie kommst du an deine Formular ID ran? $arrForm ist bei mir leer? Und die Funktion bekommt ja nur das Array $arrSet.

    Danke und viele Grüße.


    Code:
    <?php if (!defined('TL_ROOT')) die('You can not access this file directly!');
    class maketstamp extends Frontend
    {
        public function storeFormData($arrSet)
        {  
            if ($arrForm['id'] != 16)
            {
                return;
            }
            $objDate = new \Date($arrSet['mp_date']);
            $arrSet['mp_date'] = $objDate->tstamp;      
            return $arrSet;
            
        }
    }

  34. #34
    Contao-Nutzer Avatar von kleine_Hexe
    Registriert seit
    07.09.2012.
    Ort
    bei Karlsruhe
    Beiträge
    31

    Standard

    Hallo zusammen,

    ich muss Botze recht geben. Ich hab mich mit der Erweiterung gestern ein wenig rumgeschlagen. Anstatt abzufragen, ob es die Form mit "id" XY akutell ist, hab ich beschlossen abzufragen, ob $arrSet['myField'] leer ist oder nicht. Da meine letzten Programmierereien schon einige Jahre zurückliegen, ist es sicherlich nicht sonderlich elegant...


    Code:
    <?php if (!defined('TL_ROOT')) die('You can not access this file directly!');
    class maketstamp extends Frontend
    {
        public function storeFormData($arrSet)
        {
            $arrDates = array('datum','startDate','endDate'); // <-- hier die Felder angeben, die man in timestamp umgewandelt haben möchte.
            foreach ($arrDates as $z)
            {
                    if ($arrSet[$z] != "")
                    {
                            $objDate = new \Date($arrSet[$z]);
                            $arrSet[$z] = $objDate->tstamp;
                    }
            }
            return $arrSet;
    
        }
    }
    ?>
    Mit \Date funktioniert das nur so lange, wie man auch wirklich nur Datum und keine Uhrzeit nutzt. Wenn Uhrzeit ins Spiel kommt muss man mit DateTime::createFromFormat spielen.

    Viel Erfolg und viele Grüße
    kleine_Hexe

  35. #35
    Contao-Urgestein Avatar von Thomas
    Registriert seit
    16.08.2009.
    Ort
    Visselhövede
    Beiträge
    1.947
    User beschenken
    Wunschliste

    Standard

    Mir stellt sich diese Frage auch gerade!

    Wie komme ich an die ID des Formular?

    Schließlich soll sich der Hook nicht auf alle Formulare auswirken.
    Gruß Thomas
    "Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du." Mahatma Gandhi

  36. #36
    Contao-Nutzer Avatar von kleine_Hexe
    Registriert seit
    07.09.2012.
    Ort
    bei Karlsruhe
    Beiträge
    31

    Standard

    Hallo Thomas,

    hmm, ohne es ausprobiert zu haben, da es für meinen Fall auch ohne ging. Aber lege doch ein verstecktes Feld an mit der Formular-ID. Das kannst Du dann abfragen.

    Viele Grüße
    kleine_Hexe

  37. #37
    Contao-Urgestein Avatar von Thomas
    Registriert seit
    16.08.2009.
    Ort
    Visselhövede
    Beiträge
    1.947
    User beschenken
    Wunschliste

    Standard

    Eigentlich müsste das doch über $arrForm gehen!

    Code:
    public function storeFormData($arrSubmit, $arrForm)
    $arrForm müsste doch eigentlich die Konfiguration das Formulares, als Array zur Verfügung stellen.
    Sobald ich aber die Funktion um:
    Code:
        		if ($arrForm['id'] != 13)
        		{
    			return $arrSubmit;
    	    	}
    erweiter, bekomme ich folgende Fehlermeldung:
    Code:
    Fatal error: Cannot use object of type ExtendedForm as array in /var/www/web437/html/esv/system/modules/zz_efg_calender_timestamp/efgcalTimestamp.php on line 7
    Irritiert mich jetzt ein wenig, das es so in meinen Büchern steht.
    Hat sich da vielleicht was geändert?
    Gruß Thomas
    "Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du." Mahatma Gandhi

  38. #38
    Contao-Nutzer Avatar von kleine_Hexe
    Registriert seit
    07.09.2012.
    Ort
    bei Karlsruhe
    Beiträge
    31

    Standard

    Hallo Thomas,

    hmm, ich bin mir nicht sicher, ob meine mir selbst gemachte Erklärung schulbuchmäßig korrekt ist... Aber wenn ich das richtig verstanden habe, hat jeder Hook seine eigenen Array(s). Und der Array $arrForm gehört zu dem Hook "processFormData", wir verwenden aber den Hook "storeFormData" und wie man bei der funktion "public function storeFormData($arrSet)" sehen kann, gibt es dort nur den Array $arrSet.

    Ist halt nur ne Erklärung, hilft erstmal wohl net weiter...

    Viele Grüße
    kleine_Hexe
    Geändert von kleine_Hexe (27.03.2014 um 10:55 Uhr)

  39. #39
    Contao-Fan Avatar von Hauge
    Registriert seit
    31.01.2010.
    Beiträge
    643

    Standard

    Zitat Zitat von kleine_Hexe Beitrag anzeigen

    Mit \Date funktioniert das nur so lange, wie man auch wirklich nur Datum und keine Uhrzeit nutzt. Wenn Uhrzeit ins Spiel kommt muss man mit DateTime::createFromFormat spielen.
    PHP-Code:
    <?php if (!defined('TL_ROOT')) die('You can not access this file directly!');
    class 
    maketstamp extends Frontend
    {
        public function 
    storeFormData($arrSet)
        {
            
    $arrDates = array('von','startDate','endDate'); // <-- hier die Felder angeben, die man in timestamp umgewandelt haben möchte.
            
    foreach ($arrDates as $z)
            {
                    if (
    $arrSet[$z] != "")
                    {
                             
    $arrSet[$z] = strtotime($arrSet[$z]);

                    }
            }
            return 
    $arrSet;

        }
    }
    ?>
    wir haben das mit der Uhrzeit jetzt mal mit strtotime gelöst (contao 2.11.16)

  40. #40
    Contao-Nutzer
    Registriert seit
    17.02.2013.
    Beiträge
    45

    Standard

    Zitat Zitat von codepiX Beitrag anzeigen
    Hallo,

    ich habe vor einigen Tagen ebenfalls vor dem Problem gehangen und diesen Thread gefunden.

    Wie hier beschrieben handelt es sich nicht, und daher schreibe ich meinen Lösungsvorschlag hier rein, um den 'processFormData' Hook, sondern um den 'storeFormData' Hook. Dieser wird vor dem Speichern in die DB aufgerufen und erlaubt die Manipulation der Daten. Hilfe habe ich hier auch im IRC-Channel erhalten.

    Registrierung des Hooks in eigener Erweiterung (oder in einer z_custom Erweiterung):

    /system/name_erweiterung/config/config.php

    PHP-Code:
    $GLOBALS['TL_HOOKS']['storeFormData'][] = array('yourModule''storeFormData'); 
    /system/name_erweiterung/modules/yourModule.php

    PHP-Code:
    public function storeFormData($arrSet)
    {
        
    $objDate = new \Date($arrSet['dienstdatum']);
        
    $arrSet['dienstdatum'] = $objDate->tstamp;      
        return 
    $arrSet;        

    Das funktioniert in einem Contao 3.0.6 System. Mein DateFormat ist d.m.Y

    VG
    Patrick
    Hallo zusammen, das Thema scheint wohl eine beständige Aktualität zu besitzen. Nach langem Suchen habe ich endlich diesen Thread gefunden und war schon glücklich, das ich bestimmt hier meine Lösung finde, aber das Glück war nur von kurzer Dauer

    Mein Problem: Auch ich möchte ein ganz einfaches FE-Formular nutzen, um Veranstaltungen zu speichern. Ich arbeite mit 3.2.18 LTS und habe calendarfield installiert, damit der Frontend-Benutzer die Daten einfacher eingeben kann und weil ich die Hoffnung hatte, das calendarfield vielleicht automatisch die Konvertierung von String in timestamp vornimmt, wenn ich angebe, dass die Formulardaten abgespeichert werden sollen. Aber ich kriege es mit der Erweiterung allein nicht hin. Jetzt habe ich mal die obigen Zeilen von Patrick eingegeben, das Vorgehen ist ja total einleuchtend erklärt. Aber leider klappt auch das bei mir nicht und zwar. Der Reihe nach:

    Mein config.php sieht so aus:
    PHP-Code:
    <?php

    $GLOBALS
    ['TL_HOOKS']['storeFormData'][] = array('convertDate''storeFormData');
    Das sind immer die kompletten Dateien, keine Ausschnitte.

    Meine Klasse so:
    PHP-Code:
    <?php


    Class convertDate extends Frontend
    {
        
        public function 
    __construct()
        {
            
    parent::__construct();
            
    $this->loadLanguageFile('tl_member');
        }
        
        public function 
    storeFormDate($arrSet
            { 
                    
    $objDate = new \Date($arrSet['startDate']); 
                    
    $arrSet['startDate'] = $objDate->tstamp;       
                    return 
    $arrSet;         
            }

    }
    Eine autoload.php und .ini habe ich auch, da steht dann der Pfad, wo mein Modul zu finden ist, nämlich unter "TL_ROOT/system/modules/z_convertDate".

    Fatal error: Call to undefined method convertDate::storeFormData() in C:\xampp\htdocs\contao3218\system\modules\core\for ms\Form.php on line 450

    Aus reiner Verzweifelung habe ich dann die Zeile: namespace Contao; hinzugefügt und jetzt erhalte ich die folgende Fehlermeldung:Error.png

    Kann mir da jemand bitte weiterhelfen?? Vielen Dank im Voraus!

Aktive Benutzer

Aktive Benutzer

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

Ähnliche Themen

  1. Formular Submit Button mit <a>-Tag umsetzen
    Von mitlinks im Forum Formulare
    Antworten: 15
    Letzter Beitrag: 12.09.2014, 08:56
  2. Modul Auflistung Timestamp in Datum umwandeln
    Von HeinM im Forum Sonstiges zu Contao
    Antworten: 14
    Letzter Beitrag: 16.12.2013, 09:28
  3. Antworten: 5
    Letzter Beitrag: 18.01.2010, 16:39
  4. Timestamp via Formular
    Von Ricks im Forum Sonstiges zu Contao
    Antworten: 3
    Letzter Beitrag: 06.12.2009, 13:00
  5. BE Formular erweitern und Wert auslesen?
    Von juju im Forum Sonstiges zu Contao
    Antworten: 6
    Letzter Beitrag: 03.09.2009, 14:46

Lesezeichen

Lesezeichen

Berechtigungen

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