[Gelöst] Leads und FE Darstellung via Auflistung
Hallo,
ich brauche eure Hilfe.
Ich habe ein Formular in einem geschützten Bereich mit Feldern "Mitgliedsname", "Startdatum" und optionalen "Enddatum"
und speichere die Daten mit "Leads".
Hintergrund ist unser Bootsverein bei dem sich Mitglieder das Vereinsboot bel. reservieren können (Es gibt also keine vorgegebenen Termineinträge).
Mit dem Modul "Auflistung" erhalte ich zumindest im FE über Tabelle "tl_lead" und Feld "post_data" eine entsprechende Listendarstellung.
Ich bräuchte zusätzlich jedoch einen gezielten Zugriff aller Datumseinträge anhand der Einträge aus der Tabelle "tl_lead_data".
Im Formular möchte ich damit über einen datePicker die bereits reservierten Datumseinträge nicht zur Auswahl zulassen.
Hätte jemand ein entsprechendes exemplarisches Auflistung Template mit Abfrage über tl_lead/tl_lead_data vorliegen?
Danke
Update:
- 2 Möglichkeiten der FE Darstellung mit Leads bzw. Abfrage der gespeicherten Daten in einem bel. Template:
siehe Beitrag unten
- Alternative mit Core Funktionaliät (ab Contao 4.9 - In DB speichern anhand der Tabelle "tl_calendar_events" mit Hook "prepareFormData"):
siehe Beitrag unten
Beispiel Formular in DB Speichern (Core) - tl_calendar_events
Vielen Dank!
Anbei meine bisherige (working) Umsetzung. FE Formular mit Feldern:
- Title [title],
- Startdatum [startDate] (Pflicht)
- und optionalen Enddatum [endDate].
Formulardaten werden in "tl_calendar_events" gespeichert.
PHP-Code:
<?php
// src/EventListener/PrepareFormDataListener.php
namespace App\EventListener;
use Contao\CoreBundle\ServiceAnnotation\Hook;
use Contao\Form;
/**
* @Hook("prepareFormData")
*/
class PrepareFormDataListener
{
public function __invoke(array &$submittedData, array $labels, array $fields, Form $form): void
{
// form restriction
if ($form->id == "3") {
$submittedData['pid'] = 5;
$submittedData['author'] = 1;
$submittedData['published'] = 1;
$submittedData['title'] = "Reservierung - " . $submittedData['title'];
$submittedData['alias'] = rawurlencode($submittedData['title']);
// mandatory field
$submittedData['startTime'] = strtotime($submittedData['startDate']);
// optional field
if (!empty(trim($submittedData['endDate']))) {
$submittedData['endTime'] = strtotime($submittedData['endDate']);
} else {
$submittedData['endTime'] = null;
$submittedData['endDate'] = null;
}
$submittedData['location'] = "WSG";
$submittedData['description'] = "Reservierung Vereins-Boot";
}
}
}
?>
Werte der "$submittedData['pid']" und "$form->id" entsprechend den jeweiligen BE Angaben ...
Gespeicherte Leads Daten im Frontend auflisten
Nachtrag zur Leads FE Ausgabe.
Möglichkeit 1:
Mit dem Modul "Auflistung" - Tabelle "tl_lead" und Feld "post_data" - eine entsprechende Listendarstellung generieren und via CSS stylen.
Möglichkeit 2:
Mit den Funktionen der Leads "DataCollector.php" die gespeicherten (Leads) Daten gezielt abfragen.
Hierzu in einem bel. Contao Template folgende Angaben setzen:
PHP-Code:
use Leads\DataCollector;
$myLeadsMasterFormID = 1;
$dataCollector = new DataCollector($myLeadsMasterFormID);
// all values as array
$data = $dataCollector-> getExportData();
dump($data);
Die "$myLeadsMasterFormID" muss dann der entsprechenden/gewünschten "master_id" der Tabelle "tl_lead" entsprechen.
Das obige array "$data" (s.a. getExportData()) bietet dann Zugriff auf alle gespeicherten Daten.
Das Ergebnis aus "getExportData()" kann via "setLeadDataIds()" darüber hinaus eingeschränkt werden.