Contao-Camp 2024
Ergebnis 1 bis 37 von 37

Thema: EFG und Kalenderfeld - Datum wird falsch gespeichert

  1. #1
    Contao-Nutzer Avatar von easy
    Registriert seit
    17.03.2011.
    Ort
    Remagen
    Beiträge
    58

    Standard EFG und Kalenderfeld - Datum wird falsch gespeichert

    Hallo,

    ich habe mir mit dem EFG eine Anwendung gebastelt, die es angemeldeten FrontendUsern gestattet, selber Termine zu erfassen und zu bearbeiten. Das funktioniert soweit auch ganz gut.

    Nur mit dem Formularfeld vom Typ 'Kalenderfeld' aus der Extension 'calendarfield' habe ich ein kleines Problem. Es wird zwar abgespeichert, aber wenn ich mir das Event im Backend anschaue, dann zeigt er mir in der Auswahl das Datum 1.1.1970. In der Datenbank steht z.B. für den Wert 23.04.2011 nur folgendes in der Spalte 'startDate': 2304 (Wenn ich hier einmal in das Event gehe und speichern drücke ist alles wieder OK).

    Hier ist irgendwie die Umwandlung in den Integerwert nicht erfolgt.

    Die Einstellungen für's Datum stehen in meinem System auf 'm.d.Y'.

    Über den Hook 'processEfgFormData' habe ich mir die Werte angeschaut und auch ausprobiert, wie es ist, wenn ich den Wert selber umwandle, aber dieser geänderte Wert wird nicht in die Datenbank übernommen.

    Hier mal der Hook:

    Code:
      public function processEfgFormData($arrSubmitted, $arrFiles, $intOldId,&$arrForm) {
    
          // Einschraenkung auf das Formular 
          $this->log('HOOK: processEfgFormData',__METHOD__,'INFO');
          if ($arrForm['formID'] == 'Termin_Formular') { 
              $this->log($arrForm['formID'],__METHOD__,'INFO');
              if ($arrSubmitted['startDate'] != '') { 
                  $startDt = strtotime($arrSubmitted['startDate']);
                  $stopdt = $startDt + (60*60*24); 
                  $this->log('stopDt='.$stopDt,__METHOD__,'INFO');
                  $this->log('startDt='.$startDt,__METHOD__,'INFO');
              }
              $arrSubmitted['startDate'] = $startDt;
                   
        $this->log('arrSubmitted[startDate]='.$arrSubmitted['startDate'],__METHOD__,'INFO');
              $arrSubmitted['stop'] = $stopdt;
            return $arrSubmitted;
          }
    Hat jemand eine Idee warum das Datum nicht richtig abgespeichert wird? - Was habe ich übersehen? Ich bräuchte mal 'nen kleinen Tip.

    Wie sieht es mit dem Speichern von Änderungen via Hook aus - warum wird hier nicht der korrigierte Wert über das zurückgegebene Array $arrSubmitted übernommen?

    Hat jemand eine Idee? - Bitte nur Lösungsvorschläge mit dem EFG!

    Mit dem Calendar_Editor + Kalenderfeld funktioniert es prima. Den kriege ich auch für meine Anwendung hingebogen. Interessant ist für mich aber der Einsatz des EFG, weil dieser doch noch ein paar nette Zusatz-Features bietet.

    Gruß easy

  2. #2
    Contao-Nutzer Avatar von easy
    Registriert seit
    17.03.2011.
    Ort
    Remagen
    Beiträge
    58

    Standard

    Hi, hat denn keiner eine Idee oder kleinen Hinweis?

  3. #3
    AG CMS-Garden
    Contao-Urgestein
    Avatar von lindesbs
    Registriert seit
    05.06.2009.
    Ort
    Oer-Erkenschwick
    Beiträge
    4.154
    Partner-ID
    keine
    User beschenken
    Wunschliste

    Standard

    ich kenn den efg mit seinen Hooks nicht, aber da die arrFiormn als Referenz uebergeben wird, denke ich mal, das du dort reinschreiben musst.
    Ansonsten schau doch einfahc im Code des efg Hooks nach.
    von Willi Voltz aus PR 500: Henry George sagte einmal: »Kultur ist Zusammenarbeit.«


    Contao-Hosting: begeisterter Uberspace-Nutzer

  4. #4
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Das Feld tl_calendar_events.startDate ist vom Typ 'integer'. Ich vermute, dass 'calendarfield' einen String zum Speichern liefert, das wird dann nicht richtig in dem Feld gespeichert. Schau mal, ob du 'calendarfield' patchen kannst, dass es einen Unix-Timestamp liefert.

    Andreas
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  5. #5
    Contao-Nutzer Avatar von easy
    Registriert seit
    17.03.2011.
    Ort
    Remagen
    Beiträge
    58

    Standard

    Danke für die Antwort.
    Aber im EFG ist es zumindest so definiert, dass das zurückgegebene Array (hier $arrSubmitted) die abzuspeichernden Daten enthalten soll. Die stehen dort auch wunderbar drin. Und ich habe auch schon das Hauptmodul des EFG Efp.php bis zum Ende durchforscht. Die Daten werden aus dem Hook richtig übernommen und bleiben auch bis zum Ende des Moduls Efp.php erhalten (weiter bin ich allerdings noch nicht gekommen). $arrForm enthält nur Definitionen für das drumherum wie Infos zur Bestätigungsmail etc. Es muss also noch tiefer drin stecken.
    Dieser Mechanismus scheint ja nach einigen Beiträgen zu urteilen, zu funktionieren. Bei mir leider nicht.

  6. #6
    Contao-Nutzer Avatar von easy
    Registriert seit
    17.03.2011.
    Ort
    Remagen
    Beiträge
    58

    Standard

    Hi Andreas,

    ist einen Versuch Wert calenderfield direkt zu patchen. Ich versuchs mal.

  7. #7
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Also ich habe auch des öfteren Probleme, da einige Erweiterungen ein Datum als String in die DB schreiben und keinen Unix-Timestamp.

    Bist du sicher, dass die Umformung mit strtotime() funktioniert? Weil du sagtest du hättest das Format d.m.Y, aber strtotime() erwartet doch ein englisches Format.

    Gruß Andreas
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  8. #8
    Contao-Nutzer Avatar von easy
    Registriert seit
    17.03.2011.
    Ort
    Remagen
    Beiträge
    58

    Beitrag

    Super! Ein Fehler ist gefunden. Mir ist das mit dem englischen Format für strtotime durch die Lappen gegangen. Die Zahl ist schon wesentlich größer. Vorher hatte ich 1304035200 und jetzt bekomme ich 946339200 als Unix-Timestamp.

    Nur leider wird auch der richtig berechnete Wert nicht in die Datenbank übernommen.

  9. #9
    Contao-Nutzer Avatar von easy
    Registriert seit
    17.03.2011.
    Ort
    Remagen
    Beiträge
    58

    Standard

    Ich habe jetzt ein eigenes Modul für meine Belange kreiert. Mit EFG habe ich es leider nicht hinbekommen.

    Danke für Eure Tipps!

    Grüsse easy

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

    Standard

    Kannst Du das Modul zur Verfügung stellen?

    Ich benötige auch aus dem EFG heraus eine Speicherung als Unix-Timestamp.

    Ich bekomme Rohdaten aus einem CSV, welche im Unix-Timestamp daher kommen, später aber über ein Formular erweiterbar sein sollen.
    Gruß Thomas
    "Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du." Mahatma Gandhi

  11. #11
    Contao-Nutzer Avatar von easy
    Registriert seit
    17.03.2011.
    Ort
    Remagen
    Beiträge
    58

    Standard

    Hallo Thomas,

    zum EFG kann ich Dir leider nichts anbieten, da ich es hier aufgegeben habe nach der Ursache zu suchen, weshalb EFG den UNIX-Timestamp nicht übernimmt und in der Datenbank speichert. Das war letztlich zu aufwändig.

    Ich habe daher eine eigene Erweiterung auf Basis vom Calendar_Edit von Daniel Gaussmann aufgebaut. Das war relativ einfach, diese an meine Bedürfnisse anzupassen.

    Das einzige an dieser Erweiterung, was mir nicht gefällt, ist die Tatsache, dass die Formulardefinitionen fest kodiert sind. Das ist etwas, was ich mit der Zeit für mich noch verändern werde. Wenn es dann soweit ist (wann, kann ich im Moment noch nicht sagen) dann werde ich diese auch öffentlich zugänglich machen.

    Ansonsten verweise ich erst mal auf http://www.gausi.de/calendar_edit_plus.html.
    Das ist gut dokumentiert, so dass man es bequem anpassen kann.

    Gruß,

    easy

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

    Standard

    Hallo, easy,

    hm, zunächst danke für Deine Antwort!

    Mein Problem liegt eher etwas anders.
    Ich möchte nicht den Calender für sowas nutzen und spiele gerade mit dem Katalog rum. Das liegt daran, dass bestimmte Daten im CSV vorliegen und ich dem Kunden nicht stundenlang den Import über die DB erklären möchte. Also Klick, übertragen und gut.

    Dafür habe ich eben ein Formular erstellt, welches genau die benötigten Felder abdeckt und den passenden Katalog füllen soll!

    Das Problem ist ja schon sehr lange bekannt, aber eine adequate Lösung für vielschichtige Fälle ist leider nicht gefunden. Der eine macht es Update unsicher über über JS ein anderer beeinflusst über Hooks (was auch mein weg wäre). Trifft aber leider nicht meinen Fall, bzw. scheine ich ein wenig vernagelt was die Portierung anbelangt.

    Du könntest mir Deine Lösung, auch wenn hardcodiert, einfach mal zeigen.
    Vielleicht lasse ich mich doch noch auf den Kalender ein.
    Gruß Thomas
    "Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du." Mahatma Gandhi

  13. #13
    Contao-Fan
    Registriert seit
    08.07.2009.
    Beiträge
    530

    Standard

    Hallo,

    gibt es in dieser Sache mittlerweile schon ein Ergebnis?
    Ich möchte auch über den EFG ein Datum (mit Kalenderauswahl) im UNIX Timestamp Format in die DB speichern.
    Die verfügbaren Kalendererweiterungen bekomme ich bisher mit verschiedenen Einstellungen nicht dazu - gibt es dafür eine Lösung?

    LG

  14. #14
    Contao-Fan Avatar von tom
    Registriert seit
    16.06.2009.
    Ort
    Ludwigsburg
    Beiträge
    385

    Standard

    Hallo zusammen,

    EFG speichert Datumswerte in der Datenbank (in den Tabellen tl_formdata bzw. tl_fomdata_details) als Timestamp, wenn ein Text-Eingabefeld mit Eingabeprüfung 'Datum', Feldtyp 'Kalender-Feld' o.ä. im Formulargenerator angelegt ist.

    Soweit ich verstehe, verwendet Ihr die Core-Funktion 'Eingaben speichern' des Formulargenerators und wählt als Zieltabelle die tl_events bzw. eine Catalog-Tabelle? In diesem Fall werden die Daten unverändert aus den POST-Variablen in die Zieltabelle geschrieben.

    Die per Hook 'processEfgFormData' z.B.von easy vorgenommene Konvertierung von Datums-String in Unix-Timestamp hat keinen Einfluss auf die per 'Eingaben speichern' in die Datenbank geschriebenen Werte, da 'processEfgFormData' erst nach erfolgter 'Standard-Speicherung' aufgerufen wird.

    Schöne Grüße
    Thomas

  15. #15
    Contao-Fan
    Registriert seit
    08.07.2009.
    Beiträge
    530

    Standard

    Hallo Thomas,

    vielen Dank für Dein Feedback.
    Siehst Du einen Workaround oder eine Lösung, wie das trotzdem mit der Kombination EFG / tl_events funktionieren könnte?

    Bei mir hatte das in einer alten TL-Version (2.7) in Kombination mit einer alten Version des EFG sowie einer alten Version des Calendarfields funktioniert, weshalb ich das Problem bis zum Update gar nicht kannte.

    VG

  16. #16
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Schau mal, ob der datepicker-Parameter 'inputOutputFormat' auf 'U' steht. Contao macht daraus nämlich gerne das BE-Datum-Zeit-Format.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  17. #17
    Contao-Fan
    Registriert seit
    08.07.2009.
    Beiträge
    530

    Standard

    Hallo Andreas,

    im Script-Teil des DatePicker (calendarfield) finde ich folgende Zeile zum inputOutputFormat:

    inputOutputFormat:\'' . $dateFormat . '\',

    Wie kann ich hier eingreifen? Ich kenne nur {{date::U}} für das aktuelle Datum als UNIX Timestamp.

  18. #18
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Entweder die Zeile löschen, denn default vom Datepicker ist
    Code:
    ...
    inputOutputFormat: 'U', // default to unix timestamp
    ...
    oder an dieser Stelle den Wert 'U' nochmal explizit hardcodiert setzen, was dann zwar redundant ist aber nichts schadet
    Code:
    ...
    inputOutputFormat: 'U',
    ...
    Du kannst auch das Debugging des datepickers einschalten, oder dir mit Firebug den Quelltext ansehen, datepicker clont das Inputfeld - du siehst dort einmal das Feld, welches zur Übermittlung des Wertes benutzt wird (unsichtbar durch display:none;) und einmal den Clon, der nur für die Anzeige und Eingabe eines Wertes benutzt wird.
    Geändert von Andreas (27.01.2012 um 18:13 Uhr)
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  19. #19
    Contao-Fan
    Registriert seit
    08.07.2009.
    Beiträge
    530

    Standard

    Hallo Andreas,

    wenn ich diese Zeile weglasse oder in inputOutputFormat: 'U' ändere, passiert leider nichts.

    In der Mail werden die Werte richtig angezeigt, in der DB aber anscheinend nicht als UNIX Timestamp gespeichert, da im BE weiterhin 01.01.1970 als Datum angezeigt wird.
    Muss die Konvertierung evtl. an anderer Stelle erfolgen oder habe ich etwas übersehen?

  20. #20
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Das wäre sowieso ne Lösung, die nur mit JS funktioniert. Auf jeden Fall mal die angesprochenen Sachen checken. Was zeigt Firebug? Was steht tatsächlich in der DB? Welcher Wert ist für inputOutputFormat im FE tatsächlich vorhanden?
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  21. #21
    Contao-Nutzer
    Registriert seit
    06.12.2011.
    Ort
    Dresden
    Beiträge
    26

    Standard

    Zitat Zitat von Andreas Beitrag anzeigen
    Das wäre sowieso ne Lösung, die nur mit JS funktioniert. Auf jeden Fall mal die angesprochenen Sachen checken. Was zeigt Firebug? Was steht tatsächlich in der DB? Welcher Wert ist für inputOutputFormat im FE tatsächlich vorhanden?
    Ich habe exakt das gleiche Problem wie Hangover.
    Wenn ich
    Habe mal den Datepicker (das ist die Extension "calenderfield") wie von Dir beschrieben auf "U" gesetzt und es wird die korrekte Unix Zeit (auch) in dem "display:none" inputfeld gesetzt, allerdings wird auch dieser Wert nicht als Unix Wert in der tl_calendar_events gespeichert. Siehe Screenshot1 screen1.jpg
    Bei mir läuft er auf nen Fehler nach abschicken des Formlars

    Code:
    Fatal error: Uncaught exception Exception with message Invalid date format "U" thrown in XYZ\contao-2.10.3\system\modules\calendarfield\FormCalendarField.php on line 183
    #0 D:\WD\Projekte\ddnl.net\Contao2Go_10.01.2012\Contao2Go_10.01.2012\Contao2Go_12.01.2012\Contao2Go\htdocs\vhosts\contao-2.10.3\system\modules\calendarfield\FormCalendarField.php(157): FormCalendarField->getRegexp('U')
    #1 D:\WD\Projekte\ddnl.net\Contao2Go_10.01.2012\Contao2Go_10.01.2012\Contao2Go_12.01.2012\Contao2Go\htdocs\vhosts\contao-2.10.3\system\libraries\Widget.php(476): FormCalendarField->validator('1330540959')
    #2 D:\WD\Projekte\ddnl.net\Contao2Go_10.01.2012\Contao2Go_10.01.2012\Contao2Go_12.01.2012\Contao2Go\htdocs\vhosts\contao-2.10.3\system\modules\frontend\Form.php(163): Widget->validate()
    #3 D:\WD\Projekte\ddnl.net\Contao2Go_10.01.2012\Contao2Go_10.01.2012\Contao2Go_12.01.2012\Contao2Go\htdocs\vhosts\contao-2.10.3\system\modules\efg\ExtendedForm.php(150): Form->compile()
    #4 D:\WD\Projekte\ddnl.net\Contao2Go_10.01.2012\Contao2Go_10.01.2012\Contao2Go_12.01.2012\Contao2Go\htdocs\vhosts\contao-2.10.3\system\modules\frontend\Hybrid.php(163): ExtendedForm->compile()
    #5 D:\WD\Projekte\ddnl.net\Contao2Go_10.01.2012\Contao2Go_10.01.2012\Contao2Go_12.01.2012\Contao2Go\htdocs\vhosts\contao-2.10.3\system\modules\frontend\Form.php(74): Hybrid->generate()
    #6 D:\WD\Projekte\ddnl.net\Contao2Go_10.01.2012\Contao2Go_10.01.2012\Contao2Go_12.01.2012\Contao2Go\htdocs\vhosts\contao-2.10.3\system\libraries\Controller.php(489): Form->generate()
    #7 D:\WD\Projekte\ddnl.net\Contao2Go_10.01.2012\Contao2Go_10.01.2012\Contao2Go_12.01.2012\Contao2Go\htdocs\vhosts\contao-2.10.3\system\modules\frontend\ModuleArticle.php(193): Controller->getContentElement('142')
    #8 D:\WD\Projekte\ddnl.net\Contao2Go_10.01.2012\Contao2Go_10.01.2012\Contao2Go_12.01.2012\Contao2Go\htdocs\vhosts\contao-2.10.3\system\modules\frontend\Module.php(140): ModuleArticle->compile()
    #9 D:\WD\Projekte\ddnl.net\Contao2Go_10.01.2012\Contao2Go_10.01.2012\Contao2Go_12.01.2012\Contao2Go\htdocs\vhosts\contao-2.10.3\system\modules\frontend\ModuleArticle.php(71): Module->generate()
    #10 D:\WD\Projekte\ddnl.net\Contao2Go_10.01.2012\Contao2Go_10.01.2012\Contao2Go_12.01.2012\Contao2Go\htdocs\vhosts\contao-2.10.3\system\libraries\Controller.php(421): ModuleArticle->generate(false)
    #11 D:\WD\Projekte\ddnl.net\Contao2Go_10.01.2012\Contao2Go_10.01.2012\Contao2Go_12.01.2012\Contao2Go\htdocs\vhosts\contao-2.10.3\system\libraries\Controller.php(294): Controller->getArticle('58', false, false, 'main')
    #12 D:\WD\Projekte\ddnl.net\Contao2Go_10.01.2012\Contao2Go_10.01.2012\Contao2Go_12.01.2012\Contao2Go\htdocs\vhosts\contao-2.10.3\system\modules\frontend\PageRegular.php(100): Controller->getFrontendModule('0', 'main')
    #13 D:\WD\Projekte\ddnl.net\Contao2Go_10.01.2012\Contao2Go_10.01.2012\Contao2Go_12.01.2012\Contao2Go\htdocs\vhosts\contao-2.10.3\index.php(200): PageRegular->generate(Object(DB_Mysql_Result))
    #14 D:\WD\Projekte\ddnl.net\Contao2Go_10.01.2012\Contao2Go_10.01.2012\Contao2Go_12.01.2012\Contao2Go\htdocs\vhosts\contao-2.10.3\index.php(319): Index->run()
    #15 {main}

    Wenn ich als Datumsformat "d.m.Y H:i" angeben (Siehe Screenshot 2) screen2.jpg und speichere wird es in der DB wie Screenshot 3 screen3.pnggespeichert.

    ich vermute der Bug liegt in der Extension "calenderfield"?
    Geändert von ddnl (13.02.2012 um 13:47 Uhr)

  22. #22
    Contao-Fan
    Registriert seit
    08.07.2009.
    Beiträge
    530

    Standard

    Hallo,

    ich habe mich eben nochmals mit dem Thema beschäftigt und konnte mit den bisherigen Ansätzen hier keine Lösung finden.
    In einem anderen Beitrag habe ich aber einen interessanten Ansatz gefunden, der das Problem vielleicht sauber und erweiterungssicher lösen kann:

    https://www.contao-community.de/show...ght=datum+unix

    Dort wird empfohlen, über den processFormData Hook einfach die UNIX-Konvertierung per
    $intTimestamp = $objDate->tstamp; durchzuführen.

    Ich werde diese Lösung mal ausprobieren, bin natürlich auch weiterhin für andere Ideen offen.
    Geändert von bird (12.02.2012 um 21:16 Uhr)

  23. #23
    Contao-Nutzer
    Registriert seit
    26.01.2011.
    Ort
    Leipzig
    Beiträge
    14

    Standard gelöst, glaub ich

    also das mit dem U ist richtig das im efg so einzustellen.
    man muss dazu allerdings in Zeile
    179 in der FormCalenderField.php andern
    Code:
    if (preg_match('/[BbCcDEeFfIJKkLlMNOoPpQqRrSTtUuVvWwXxZz]+/', $strFormat))
    in
    Code:
    if (preg_match('/[BbCcDEeFfIJKkLlMNOoPpQqRrSTtVvWwXxZz]+/', $strFormat))
    und evtl ein stück drunter
    im switch block ein

    Code:
    case 'U':
    einfügen....

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

    Standard

    Schon lange her dieses Thema, aber irgendwie stehe ich hier gerade auf dem Schlauch und für einige dürfte Eure Lösung ebenfalls nicht Transparent sein.

    Welche Datei muss denn jetzt geändert werden?
    Wo muss ich was eintragen, damit auch das mit dem EFG funktioniert?

    Ich arbeite hier gerade unter 2.11.16 und der Event-Editor funktioniert hier an mehreren Stellen nicht. Da reicht es leider nicht aus, nur einen Token zu implementieren und die Templates nach .html5 zu portieren.

    Es wäre doch schön, wenn Jemand eine, für alle verständliche, Lösung schreiben könnte.
    Vielen Dank.

    Ich bin doch sehr überrascht, dass der EFG noch immer keinen Timestamp nach definierten Tabellen schreibt, die außerhalb seines eigentlichen Aufgabenbereiches liegen. Macht für mich auch gar keinen Sinn, dass Datum und Uhrzeit als String in die DB geschrieben werden.
    Gruß Thomas
    "Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du." Mahatma Gandhi

  25. #25
    Contao-Fan Avatar von tom
    Registriert seit
    16.06.2009.
    Ort
    Ludwigsburg
    Beiträge
    385

    Standard

    Hallo Thomas,
    Ich bin doch sehr überrascht, dass der EFG noch immer keinen Timestamp nach definierten Tabellen schreibt, die außerhalb seines eigentlichen Aufgabenbereiches liegen.
    Weshalb sollte der EFG Daten, die außerhalb seines eigentlichen Aufgabenbereiches liegen, modifizieren?

    In die "eigenen" Tabellen speichert EFG als Timestamp:
    EFG speichert Datumswerte in der Datenbank (in den Tabellen tl_formdata bzw. tl_fomdata_details) als Timestamp, wenn ein Text-Eingabefeld mit Eingabeprüfung 'Datum', Feldtyp 'Kalender-Feld' o.ä. im Formulargenerator angelegt ist.
    Daten, die per Core-Funktion "Eingaben speichern" in eine Tabelle gespeichert werden, verändert/konvertiert EFG (selbstverständlich) nicht.
    Allein schon deshalb, weil die Speicherung per Core-Funktion VOR der EFG-Routine abläuft.

    Wenn überhaupt automatisch konvertiert werden soll, dann müsste das die Core-Funktion erledigen (evtl. Feature-Request ?). Sie könnte ggf. anhand des DCA prüfen, ob es ein Feld mit Datums-/Zeit-/Datum-und-Zeit Gültigkeitsprüfung ist.

    Die andere Variante ist, wie auch in zitierten Beiträgen beschrieben, die Konvertierung selbst vorzunehmen.
    Dazu stehen die Hooks 'prepareFormData' und 'storeFormData' zur Verfügung.


    Schöne Grüße
    Tom

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

    Standard

    Muss ich nicht verstehen!
    Überall wird als timestamp gespeichert nur für den Fall einer externen Tabelle der EFG nicht.
    Da fehlt mir ein wenig der Background zu, weil das für mich nicht wirklich einen Sinn macht, zumal es ja genügend Situationen gegeben hat, die diese Speicherung gebraucht hätten.

    Klar, es gibt Hinweise auf Lösungen, aber das zum Cross-Lesen über andere Beiträge hinweg und nicht klar zusammengefasst.
    Schade eigentlich, denn das ist eine Sache, Formulare abzubilden, die andere Module, vor allem Alte, nicht Lauffähige, zu ersetzen.
    Das beste Beispiel ist gerade mal wieder Kalendereinträge für Mitglieder zu ermöglichen, die nichts im Backend zu suchen haben.
    Gruß Thomas
    "Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du." Mahatma Gandhi

  27. #27
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    @Thomas
    Wenn du EFG nicht installiert hast, speichert das Core-Formular die Date-Felder denn dann richtig als Timestamp in eine Tabelle?

    Weil ich habe das von tom so verstanden, dass er für die Speicherung in eine Tabelle die Core-Routine benutzt. Wenn die Core-Routine das nicht erledigt, dann kann ich das verstehen, dass tom es nicht in EFG einbaut. Dann solltest du am besten, wie tom bereits sagte, ein Feature-Request stellen. Dann wäre das erledigt, sobald der Core dazu in der Lage ist.

    Bis dahin kannst du versuchen mit dem Datepicker im FE einen Timestamp ins Feld zu bringen anstatt eines Strings. Wenn du den Datepicker manuell aufgesetzt hast, sollte das eigentlich kein Problem sein.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

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

    Standard

    Achso, danke für den Denkanstoß!
    Das habe ich noch nicht probiert.

    Den Datepicker habe ich installiert, allerdings über das Backend und auch da landen die Daten leider nicht als timestamp in der Datenbank.
    Da landet sowas hier in der DB:
    datepicker-efg-kalender.png

    Der Vorletzte wurde mit dem Datepicker eingetragen, die anderen von Hand, ohne installiertem Datepicker.
    Eingetragen wurden die Daten 25. & 27.03.2014 mit der Startzeit 19:00 Uhr.

    Den EFG raus werfen ist auch keine gute Idee, denn da hängt noch ein weiteres Formular dran.

    Das Kalendermodul trägt im Übrigen die timestamps korrekt ein!
    Gruß Thomas
    "Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du." Mahatma Gandhi

  29. #29
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Ich meinte eigentlich nicht, dass du den EFG rausschmeißt, sondern einen Test machst, wozu der Core fähig ist.

    Ich habe den Test jetzt mal gemacht. In C3.2.8 ein Formular erstellt, mit Text-Feld "startDate", Eingabeprüfung "Datum", Formular speichert in tl_calendar_events. Die Eingabeprüfung im FE ist aktiv und checked auf DD.MM.YYYY, aber 12.05.2014 wird z.B. als 1205 im Feld "starDate" gespeichert. Das wäre also schonmal ein Bug im Core.

    Den Datepicker im FE aufsetzen gehört soviel ich weiß nicht zum Core. Den könntest du also nach Entwickler-Angaben manuell im FE aufsetzen um Fehler aus einer Erweiterung auszuschließen, und dann noch einige Tests mit diversen Datepicker-Optionen machen. Aber ich denke, dass als erstes der Core in der Lage sein sollte ein Datum wie 12.05.2014 zumindestens exakt so, oder besser natürlich als Timestamp in die DB zu schreiben.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  30. #30
    Contao-Fan Avatar von tom
    Registriert seit
    16.06.2009.
    Ort
    Ludwigsburg
    Beiträge
    385

    Standard

    Hallo zusammen,

    Wenn du EFG nicht installiert hast, speichert das Core-Formular die Date-Felder denn dann richtig als Timestamp in eine Tabelle?
    Nein, der Core speichert die Datumsfelder (mit oder ohne EFG) nicht als Timestamp.

    Weil ich habe das von tom so verstanden, dass er für die Speicherung in eine Tabelle die Core-Routine benutzt.
    Nein, EFG nutzt keine Core-Routine zur Speicherung in eine Tabelle. Mit "eine Tabelle" meinst Du ja wohl eine unter "Eingaben speichern" wählbare Tabelle, z.B. die tl_calendar_events. Dieses Speichern in eine wählbare Tabelle ist ein reine Core-Funktion, mit der EFG nicht das geringste zu tun hat, somit auch die dort zu speichernden Daten nicht verändert.
    Für das "Speichern in Formular-Daten" andererseits nutzt EFG eigene Tabellen und eigene Funktionen. Hier werden auch Datumseingaben (soweit möglich) automatisch als Timestamps gespeichert.

    Wenn die Core-Routine das nicht erledigt, dann kann ich das verstehen, dass tom es nicht in EFG einbaut. Dann solltest du am besten, wie tom bereits sagte, ein Feature-Request stellen. Dann wäre das erledigt, sobald der Core dazu in der Lage ist.
    +1

    Es gibt allerdings durchaus noch weitere Fälle, die vom Core nicht (automatisch) behandelt werden.
    Nicht zuletzt deshalb gibt es aber die Möglichkeit, die Daten vor dem Speichern per Hook aufzubereiten (siehe zitierte Beiträge).

    Aber ich denke, dass als erstes der Core in der Lage sein sollte ein Datum wie 12.05.2014 zumindestens exakt so, oder besser natürlich als Timestamp in die DB zu schreiben.
    +1


    Schöne Grüße
    Tom

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

    Standard

    Zunächst erst mal Danke für die Antworten.
    So langsam ist Licht am Tunnel zu sehen.
    Warum man sich dem aber nicht schon vor Jahren angenommen hat, dafür fehlt mir etwas das Verständnis, zumal diese Option ja schon mehr als oft gewünscht wurde.
    Gruß Thomas
    "Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du." Mahatma Gandhi

  32. #32
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Ja, so hatte ich das auch verstanden, dass die Funktion in Tabellen speichern weiterhin vom Core übernommen wird, auch wenn EFG installiert ist. (Ich dachte allerdings, das EFG die Core-Funktion anstößt, aber umso besser, wenn das weiterhin direkt vom Core übernommen wird.)

    Ja, das speichern von Formulardaten in EFG eigene Tabellen ist mir bekannt.

    Da mich das Probleme gerade nicht berührt, wäre es vielleicht am besten, wenn Thomas das Ticket erstellte.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

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

    Standard

    Ich hab ein Ticket erstellt!

    Mich hat das damals schon etwas geärgert, aber dadurch das es dann den Kalender-Editor gab nicht mehr wirklich verfolgt.
    Da dieser aber nicht mehr funktioniert, zumindest nicht bei mir unter 2.11.16, wollte ich das anders lösen.
    Gruß Thomas
    "Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du." Mahatma Gandhi

  34. #34
    Contao-Fan Avatar von tom
    Registriert seit
    16.06.2009.
    Ort
    Ludwigsburg
    Beiträge
    385

    Standard

    Warum man sich dem aber nicht schon vor Jahren angenommen hat, dafür fehlt mir etwas das Verständnis, zumal diese Option ja schon mehr als oft gewünscht wurde.
    Der Hauptgrund dürfte sein, dass das Thema deutlich weniger trivial ist, als es auf den ersten Blick scheint.

    Allein am Beispiel der Events ("Eingaben speichern" -> Zieltabelle tl_calendar_events)
    Recht einfach wäre es für den Core/Formulargenerator zu erkennen, dass hier ein Wert in das Feld startDate gespeichert werden soll, der allerdings nicht als Timestamp gepostet wurde und somit vor Eintrag in die Datenbank konvertiert werden müsste.
    Aber:
    Für korrekte/saubere Daten eines Events sind eigentlich noch weitere "Maßnahmen" erforderlich. Die werden beim Anlegen von Events im Backend per 'onsubmit_callback' und 'save_callback' etc. ausgeführt. Dazu gehört das Erzeugen eines Alias, das Aufbereiten der 'startTime', 'endTime', 'repeatEnd', das Triggern der RSS-Feed-Aktualisierung etc.
    Also allein bei Zieltabelle "Events" etliche Aktionen, die der Formulargenerator "automatisch" erkennen und ausführen müsste.
    Was, wenn ich im Formulargenerator als Zieltabelle die Seitenstruktur (tl_page) auswähle? Auch hier laufen beim Anlegen von Seiten im Backend deutlich mehr Aktionen ab, als nur die im Bearbeitungsformular eingetragenen Werte in die Datenbank zu schreiben. Es wird automatisch ein Artikel angelegt etc. pp.

    Der Formulargenerator müsste also im Grunde eine komplette "Frontendbearbeitung" (oder zumindest ein "Frontendneuanlegen") für beliebige Tabellen beherrschen.
    Es gab in der Richtung bereits Ansätze und (Entwickler-)Erweiterungen, m.W. aber noch keine wirklich durchgängig funktionierende.

    Welcher Aufwand in etwa dahinter steckt/stecken würde, kannst Du bei einem Blick auf den bei MetaModels für den Frontend-Editing-Part veranschlagten Betrag sehen.

    Daher ist doch das vorhandene Prinzip eine durchaus akzeptable Lösung:
    Von Haus aus können per Formulargenerator Daten in beliebige Tabellen gespeichert werden. Dabei wird allerdings ganz simpel der gepostete Wert weggespeichert.
    Wenn das nicht ausreicht, lässt sich sehr einfach per genannter Hooks/callbacks eine Konvertierung oder was auch immer erforderlich ist, integrieren.
    Einfach und sehr flexibel.

  35. #35
    Contao-Fan Avatar von tom
    Registriert seit
    16.06.2009.
    Ort
    Ludwigsburg
    Beiträge
    385

    Standard

    Ich hab ein Ticket erstellt!
    Werden Wetten auf die Antwort angenommen?

  36. #36
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Ja, ich wette, dass es sofort umgesetzt wird
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

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

    Standard

    tom, dass sind aber alles Werte, die ich im Formular durchaus mitgeben kann, so das sich Contao darum gar nicht mehr kümmern muss.

    Einfach ein einfaches Formular erstellen und Werte füllen, damit ist es nicht unbedingt getan, da gebe ich Dir Recht.
    Ich sehe die Möglichkeit generell timestamps über den FG zu speichern eher als Feature an, bzw. die Art Daten einheitlich zu speichern.
    Was die Arbeit für Euch Entwickler sicherlich auch etwas erleichtern würde.
    Gruß Thomas
    "Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du." Mahatma Gandhi

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
  •