Contao-Camp 2024
Ergebnis 1 bis 23 von 23

Thema: Datum im Formular eingeben, als timestamp speichern

  1. #1
    Contao-Fan Avatar von Flaschenzug
    Registriert seit
    08.07.2010.
    Ort
    Berlin
    Beiträge
    312

    Standard Datum im Formular eingeben, als timestamp speichern

    Wie kann man denn ein Datum in einem Formular eingeben (z.B. 28.3.2022) und dieses als timestamp in der Datenbank speichern lassen?
    Ich habe ein kleine Erweiterung in der ein Datum mittels rgxp => date zu einem Timestamp umgewandlet wird.

    Code:
    'eventdate'    => array
            (
                'label'         => &$GLOBALS['TL_LANG']['tl_eventkalender']['eventdate'],
                'inputType' => 'text',
                'exclude'     => true,
                'sql'            => "varchar(11) NOT NULL DEFAULT ''",
                'filter'         => true,
                'eval' => array('rgxp'=>'date', 'datepicker'=>true, 'feEditable'=>true, 'feViewable'=>true),
                'flag'            => 6,
            ),
    Trage ich aber die Date mittels Contao Formular in die Datenbank ein, wird ein Datum gespeichert.

    Lässt sich das realisieren? Danke vielmals!

  2. #2
    Contao-Urgestein Avatar von cliffparnitzky
    Registriert seit
    08.10.2010.
    Ort
    Lüneburg
    Beiträge
    2.446
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Du meinst mittels einem Frontend Formular?

  3. #3
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.682
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von Flaschenzug Beitrag anzeigen
    Trage ich aber die Date mittels Contao Formular in die Datenbank ein, wird ein Datum gespeichert.

    Lässt sich das realisieren?
    z. B.
    damit https://docs.contao.org/dev/referenc...ocessFormData/
    oder damit https://docs.contao.org/dev/referenc...storeFormData/

    je nachdem, wie Du die Speicherung realisierst

  4. #4
    Contao-Fan Avatar von Flaschenzug
    Registriert seit
    08.07.2010.
    Ort
    Berlin
    Beiträge
    312

    Standard

    Zitat Zitat von cliffparnitzky Beitrag anzeigen
    Du meinst mittels einem Frontend Formular?
    Genau, mittels Contao Frontend Formular.

  5. #5
    Contao-Urgestein Avatar von cliffparnitzky
    Registriert seit
    08.10.2010.
    Ort
    Lüneburg
    Beiträge
    2.446
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Dann programmatisch wie @zonky verlinkt oder via https://extensions.contao.org/?q=hof...rfield&pages=1

  6. #6
    Contao-Fan Avatar von Flaschenzug
    Registriert seit
    08.07.2010.
    Ort
    Berlin
    Beiträge
    312

    Standard

    Okay, super. Danke schon mal euch zweien.

    Könnte einfach das Plugin nehmen, aber würde lieber die Technik hinter den Hooks verstehen.

    Bei den Hooks bzw. in dem Fall dem Eventlistener ist mir eins noch nicht ganz klar:
    Wo kann ich diese Hooks ablegen, so das Contao diese registriert?
    Brauche ich dafür ein eigenes Modul?

    Das geht für mich aus der Anleitung hier https://docs.contao.org/dev/reference/hooks/ nicht so richtig für mich hervor.

  7. #7
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.682
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von cliffparnitzky Beitrag anzeigen
    Dann programmatisch wie @zonky verlinkt oder via https://extensions.contao.org/?q=hof...rfield&pages=1
    hmm... habe die Erweiterung nochmal überflogen: sehe ad hoc keine Umwandlung zu Timestamp... Primär ist die Erweiterung m. E. für den Picker im FE und ggf. für Validierungen der Datumseingrenzungen wie "heute und Zukunft"... oder?!?

  8. #8
    Contao-Urgestein Avatar von cliffparnitzky
    Registriert seit
    08.10.2010.
    Ort
    Lüneburg
    Beiträge
    2.446
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Ja, aber der speichert nen timestamp ... alles andere ist ja Blödsinn ;-)

  9. #9
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.682
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von cliffparnitzky Beitrag anzeigen
    Ja, aber der speichert nen timestamp ... alles andere ist ja Blödsinn ;-)
    per se speichern Contao-Formulare gar nix - hautpsächlich werden die Daten per E-Mail weiter gereicht und da wäre ein Timestamp eher nicht so angesagt...

    Ob die Erweiterung für eine Speicherung die Umwandlung schon vorbereitet, kann ich nicht sagen.

  10. #10
    Contao-Urgestein Avatar von cliffparnitzky
    Registriert seit
    08.10.2010.
    Ort
    Lüneburg
    Beiträge
    2.446
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Das Weiterreichen als Timstamp meinte ich. Das macht sie. Wenn du das in die Mail haust und mit nem Inserttag formatierst, ist doch alles fein.

  11. #11
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.682
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von cliffparnitzky Beitrag anzeigen
    Das Weiterreichen als Timstamp meinte ich. Das macht sie. Wenn du das in die Mail haust und mit nem Inserttag formatierst, ist doch alles fein.
    das wäre mehr als ungewöhnlich, das so zu machen - wenn Du die Core-Funktionalität der E-Mail-Versendung verwendest, kommst Du gar nicht an die Sachen ran und kannst da auch nicht mit einem Inserttag arbeiten! Beim NC mag das gehen - würde mich dennoch wundern...

  12. #12
    Contao-Fan Avatar von Flaschenzug
    Registriert seit
    08.07.2010.
    Ort
    Berlin
    Beiträge
    312

    Standard

    Dann muss ich sowieso auf den Hook zurückgreifen.

    Zitat Zitat von Flaschenzug Beitrag anzeigen
    Bei den Hooks bzw. in dem Fall dem Eventlistener ist mir eins noch nicht ganz klar:
    Wo kann ich diese Hooks ablegen, so das Contao diese registriert?
    Brauche ich dafür ein eigenes Modul?

    Das geht für mich aus der Anleitung hier https://docs.contao.org/dev/reference/hooks/ nicht so richtig für mich hervor.
    Freue mich über Tipps hierzu. Danke :-)

  13. #13
    Contao-Urgestein Avatar von cliffparnitzky
    Registriert seit
    08.10.2010.
    Ort
    Lüneburg
    Beiträge
    2.446
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Na gut, ich weiß, dass die Erweiterung das ausgewählte Datum als Timestamp weiterreicht. Mit Contao Standard Formular hab ich das nie getestet.

  14. #14
    Contao-Fan Avatar von Flaschenzug
    Registriert seit
    08.07.2010.
    Ort
    Berlin
    Beiträge
    312

    Standard

    Und wo kann ich die Hooks einsetzen?
    Im Modul? In einer Config Datei von Contao?
    Danke

  15. #15
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.682
    User beschenken
    Wunschliste

    Standard

    dann komm mal zum Stammtisch - dort können wir Dir das zeigen ;-)

    oder beim Camp22

  16. #16
    Contao-Urgestein Avatar von Franko
    Registriert seit
    22.06.2009.
    Beiträge
    1.503
    Partner-ID
    6122

    Standard

    Eventuell hilft zwecks Einstieg der Beitrag:
    https://docs.contao.org/manual/de/an...ten-speichern/
    Freelancer, Digital Design Enthusiast, Contao Aficionado and Tutorial Junkie @MoinFranko - Carpe diem ...

  17. #17
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.682
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von cliffparnitzky Beitrag anzeigen
    Na gut, ich weiß, dass die Erweiterung das ausgewählte Datum als Timestamp weiterreicht. Mit Contao Standard Formular hab ich das nie getestet.
    Man kann das so konfigurieren - siehe https://flatpickr.js.org/examples/ "Human-friendly Dates" - dass "intern" ein anderes Format verwendet wird als das was angezeigt wird.

    Beim Blick in den Quelltext sieht man, dass dafür ein hidden field verwendet wird.

    Ergo: das Datumsfeld ist per se ein "dummes Textfeld" und das was da eingetragen wird, geht als POST an den Server - dort kann das in eine E-Mail übernommen und/oder in DB/CSV gespeichert werden.

    ... und natürlich per Hook vorher nochmal transferriert

  18. #18
    Contao-Fan Avatar von Flaschenzug
    Registriert seit
    08.07.2010.
    Ort
    Berlin
    Beiträge
    312

    Standard

    Zitat Zitat von Franko Beitrag anzeigen
    Eventuell hilft zwecks Einstieg der Beitrag:
    https://docs.contao.org/manual/de/an...ten-speichern/
    Ich habe mal versucht mich daran zu orientieren:

    Code:
    <?php
    
    // src/EventListener/PrepareFormDataListener-Events.php
    namespace App\EventListener;
    
    use Contao\CoreBundle\ServiceAnnotation\Hook;
    use Contao\Form;
    use Doctrine\DBAL\Connection;
    
    /**
     * @Hook("prepareFormData")
     */
    class PrepareFormDataListener
    {
        // Change these variables for your form
        private const FORM_ID = 8;
    
        private $db;
    
        public function __construct(Connection $db)
        {
            $this->db = $db; // wird eigentlich nicht gebraucht, hab es aber vorerst drin gelassen?
        }
    
        public function __invoke(array &$submittedData, array $labels, array $fields, Form $form): void
        {
            // Check if this is the right form
            if (self::FORM_ID !== (int) $form->id) {
                return;
            }
    
            $submittedData['eventdate'] = '123'; // einfach mal schauen ob irgend ein Wert ankommt
        }
    }
    Allerdings passiert - wer hätte es anders erwartet - erstmal nichts.
    Muss ich das Script noch irgend wie bei Contao registrieren?
    Habe den "Anwendungs-Cache" geleert.

    Danke

  19. #19
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.682
    User beschenken
    Wunschliste

    Standard

    in dem Beispiel steht

    PHP-Code:
    // src/EventListener/PrepareFormDataListener.php 
    dann benenne die Datei bitte auch so - ein composer install auf Konsole hatst du sicher durchgeführt...

  20. #20
    Contao-Fan Avatar von Flaschenzug
    Registriert seit
    08.07.2010.
    Ort
    Berlin
    Beiträge
    312

    Standard

    Ich dachte ich bin clever und sorge dafür, das ich später die Hooks noch auseinander halten kann.
    Habe die Datei jetzt zurück in den ursprünglichen Namen benannt.

    ein composer install auf Konsole hatst du sicher durchgeführt...
    Gerade dabei ... und auf einmal wird 123 eingesetzt. Danke!!!

    Für mein Verständnis: Warum muss ich da ein composer install ausführen?
    Geändert von Flaschenzug (01.04.2022 um 09:07 Uhr)

  21. #21
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.682
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von Flaschenzug Beitrag anzeigen
    Für mein Verständnis: Warum muss ich da ein composer install ausführen?
    vereinfacht gesagt, werden die Klassen in einer Datei angemeldet damit ein schnellerer Zugriff darauf möglich ist - das muss aber auch initiiert werden z. B. mit einem composer install...

  22. #22
    Contao-Fan Avatar von Flaschenzug
    Registriert seit
    08.07.2010.
    Ort
    Berlin
    Beiträge
    312

    Standard

    Großartig, Danke euch allen. Das hat mir sehr geholfen!

    Eine Frage zur "best practice" habe ich noch.
    Angenommen ich habe ein zweites Formular bei dem ich Daten verändern will.

    Wäre Folgendes der gängige Ansatz? Oder gibt es da einen sinnvolleren Weg?
    Code:
    <?php
    
    // src/EventListener/PrepareFormDataListener.php
    namespace App\EventListener;
    
    use Contao\CoreBundle\ServiceAnnotation\Hook;
    use Contao\Form;
    use Doctrine\DBAL\Connection;
    
    /**
     * @Hook("prepareFormData")
     */
    class PrepareFormDataListener
    {
        
        private $db;
    
        public function __construct(Connection $db)
        {
            $this->db = $db; // wird eigentlich nicht gebraucht, hab es aber vorerst drin gelassen?
        }
    
        public function __invoke(array &$submittedData, array $labels, array $fields, Form $form): void
        {
            // Check if this is the right form
            if ((int) $form->id === IDXXX) {
                  $submittedData['eventdate'] = '123'; // einfach mal schauen ob irgend ein Wert ankommt
            }
            elseif ((int) $form->id === IDYYY) {
                  $submittedData['eventdate'] = '123'; // einfach mal schauen ob irgend ein Wert ankommt
            }
            // usw ... ?
    
        }
    }
    Danke und ein schönes Wochenende
    Geändert von Flaschenzug (02.04.2022 um 20:24 Uhr)

  23. #23
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.682
    User beschenken
    Wunschliste

    Standard

    im Prinzip ja, wobei einzelne "if´s" reichen und du das elseif weglassen kannst

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
  •