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.
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:
Zitat:
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:
Zitat:
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?
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Zitat von
codepiX
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 :o
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:Anhang 15374
Kann mir da jemand bitte weiterhelfen?? Vielen Dank im Voraus!