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!
Liste der Anhänge anzeigen (Anzahl: 1)
Was meinst Du mit "muss verifiziert werden"?
Hier der Pfad aus dem FTP-Verzeichnis der Seite:
Anhang 27215
und hier der Inhalt der php-Datei
Code:
// src/EventListener/PrepareFormDataListener.php
namespace App\EventListener;
use Contao\CoreBundle\DependencyInjection\Attribute\AsHook;
use Contao\CoreBundle\Slug\Slug;
use Contao\Form;
use Doctrine\DBAL\Connection;
#[AsHook('prepareFormData')]
class PrepareFormDataListener
{
// Change these variables for your form, calendar and author
private const FORM_ID = 1;
// private const CALENDAR_ID = 2;
private const AUTHOR_ID = 1;
private $slug;
private $db;
public function __construct(Slug $slug, Connection $db)
{
$this->slug = $slug;
$this->db = $db;
}
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;
}
// Mandatory fields
// $submittedData['pid'] = self::CALENDAR_ID;
$submittedData['pid'] = $submittedData['pid'];
$submittedData['author'] = self::AUTHOR_ID;
// Set this to false, if newly created events should not be immediately published
$submittedData['published'] = true;
// Generate unique alias
$submittedData['alias'] = $this->getSlug($submittedData['title']);
// Convert and set date fields
$submittedData['startDate'] = strtotime(trim($submittedData['startDate'])) ?: null;
$submittedData['startTime'] = strtotime(trim($submittedData['startTime'])) ?: null;
// $submittedData['startTime'] = $submittedData['startDate'];
// Optional fields
if (!empty(trim($submittedData['endDate']))) {
$submittedData['endDate'] = strtotime(trim($submittedData['endDate'])) ?: null;
$submittedData['endTime'] = strtotime(trim($submittedData['endTime'])) ?: null;
// $submittedData['endTime'] = $submittedData['endDate'];
} else {
$submittedData['endDate'] = null;
$submittedData['endTime'] = null;
}
}
private function getSlug(string $text, string $locale = 'de', string $validChars = '0-9a-z'): string
{
$options = [
'locale' => $locale,
'validChars' => $validChars,
];
$duplicateCheck = function (string $slug): bool {
return $this->db->fetchOne('SELECT COUNT(*) FROM tl_calendar_events WHERE alias = ?', [$slug]) > 0;
};
return $this->slug->generate($text, $options, $duplicateCheck);
}
}