Ergebnis 1 bis 25 von 25

Thema: [Gelöst] Leads und FE Darstellung via Auflistung

  1. #1
    Alter Contao-Hase Avatar von Franko
    Registriert seit
    22.06.2009.
    Beiträge
    1.286
    Partner-ID
    6122
    Contao-Projekt unterstützen

    Standard [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
    Geändert von Franko (18.06.2021 um 10:56 Uhr)
    Carpe diem ...

  2. #2
    Alter Contao-Hase Avatar von Franko
    Registriert seit
    22.06.2009.
    Beiträge
    1.286
    Partner-ID
    6122
    Contao-Projekt unterstützen

    Standard

    Oder hat jemand Erfahrungen mit dem Core Mitteln zum Speichern in die Datenbank via Formular - dann speziell in die "tl_calendar_events"?
    Also via FE Formular neue Events anlegen ...
    Carpe diem ...

  3. #3
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    27.290
    Partner-ID
    10107

    Standard

    Zitat Zitat von Franko Beitrag anzeigen
    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 Auflistung Template mit Abfrage über tl_lead/tl_lead_data vorliegen?
    Danke
    Am besten ist es, wenn du dir mit dem Leads\DataCollector die Daten holen lässt. Einfachstes Beispiel:
    PHP-Code:
    use Leads\DataCollector;

    $dataCollector = new DataCollector($masterFormId);
    $data $dataCollector->getFieldsData(); 
    » sponsor me via GitHub or PayPal

  4. #4
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    27.290
    Partner-ID
    10107

    Standard

    Zitat Zitat von Franko Beitrag anzeigen
    Oder hat jemand Erfahrungen mit dem Core Mitteln zum Speichern in die Datenbank via Formular - dann speziell in die "tl_calendar_events"?
    Also via FE Formular neue Events anlegen ...
    Welche Hilfe genau bräuchtest du da? Dein Formular muss halt alle Formularfelder haben, die du aus dem Frontend heraus in tl_calendar_events befüllen lassen möchtest, mit dem selben Feldnamen wie im DCA definiert. Du musst allerdings nicht unbedingt alle DCA Felder auch als Formularfelder anlegen. Ich würde empfehlen einige Felder (wie bspw. pid) erst mit dem prepareFormData Hook dann automatisch einzufügen, bzw. solltest du ohnehin manche Formularfelder vielleicht im selben Hook zuerst prozessieren lassen (ansonten könnte man aus dem Frontend heraus bspw. Events in beliebigen Kalendern hinzufügen).
    Geändert von Spooky (15.06.2021 um 11:40 Uhr)
    » sponsor me via GitHub or PayPal

  5. #5
    Alter Contao-Hase Avatar von Franko
    Registriert seit
    22.06.2009.
    Beiträge
    1.286
    Partner-ID
    6122
    Contao-Projekt unterstützen

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Am besten ist es, wenn du dir mit dem Leads\DataCollector die Daten holen lässt. Einfachstes Beispiel:
    PHP-Code:
    use Leads\DataCollector;

    $dataCollector = new DataCollector($masterFormId);
    $data $dataCollector->getFieldsData(); 
    Danke - probier ich aus ...
    Carpe diem ...

  6. #6
    Alter Contao-Hase Avatar von Franko
    Registriert seit
    22.06.2009.
    Beiträge
    1.286
    Partner-ID
    6122
    Contao-Projekt unterstützen

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Welche Hilfe genau bräuchtest du da? Dein Formular muss halt alle Formularfelder haben, die du aus dem Frontend heraus in tl_calendar_events befüllen lassen möchtest, mit dem selben Feldnamen wie im DCA definiert. Du musst allerdings nicht unbedingt alle DCA Felder auch als Formularfelder anlegen. Ich würde empfehlen eine Felder erst mit dem prepareFormData Hook dann automatisch einzufügen, bzw. solltest du ohnehin manche Formularfelder vielleicht im selben Hook zuerst prozessieren lassen.
    Hm, mit den Hooks bin ich raus :-)
    Befüllen müßte man mit obigen Beispiel quasi in der "tl_calendar_events" die Felder "startDate" und/oder "endDate" und "title".
    Wahrscheinlich als hidden Feld dann die entsprechende "pid" fest vorgeben.
    Bleibt dann nur die Frage wie ich den "alias" eindeutig belegen kann damit ich einen korrekten Event Eintrag erhalte.

    Würde die funktionieren hab ich ja dann alle Event Frontendmodule zur Verfügung und mit der Auflistung wäre es auch einfacher in Kombination mit einem js datePicker ...
    Carpe diem ...

  7. #7
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    27.290
    Partner-ID
    10107

    Standard

    Zitat Zitat von Franko Beitrag anzeigen
    Wahrscheinlich als hidden Feld dann die entsprechende "pid" fest vorgeben.
    Das solltest du eben nicht machen, sondern über den Hook fix vorgeben, da man ansonsten, wie gesagt, Events in beliebigen Kalendern anlegen könnte.


    Zitat Zitat von Franko Beitrag anzeigen
    Bleibt dann nur die Frage wie ich den "alias" eindeutig belegen kann damit ich einen korrekten Event Eintrag erhalte.
    Über den prepareFormData Hook
    » sponsor me via GitHub or PayPal

  8. #8
    Alter Contao-Hase Avatar von Franko
    Registriert seit
    22.06.2009.
    Beiträge
    1.286
    Partner-ID
    6122
    Contao-Projekt unterstützen

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Am besten ist es, wenn du dir mit dem Leads\DataCollector die Daten holen lässt. Einfachstes Beispiel:
    PHP-Code:
    use Leads\DataCollector;

    $dataCollector = new DataCollector($masterFormId);
    $data $dataCollector->getFieldsData(); 
    Ähm - $masterFormId entspricht dann der "master_id" der Tabelle "tl_lead"?
    Carpe diem ...

  9. #9
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    27.290
    Partner-ID
    10107

    Standard

    Ja, das ist die ID des Formulares, welches du als Hauptformular festgelegt hast.
    » sponsor me via GitHub or PayPal

  10. #10
    Alter Contao-Hase Avatar von Franko
    Registriert seit
    22.06.2009.
    Beiträge
    1.286
    Partner-ID
    6122
    Contao-Projekt unterstützen

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Das solltest du eben nicht machen, sondern über den Hook fix vorgeben, da man ansonsten, wie gesagt, Events in beliebigen Kalendern anlegen könnte.
    Über den prepareFormData Hook
    Nochmal eine Frage zur Hook Nutzung (Contao 4.9 / Contao 4.11)
    Ich lege folgende Dateien an:

    /system/modules/myFormHooks/config/config.php
    /system/modules/myFormHooks/config/autoload.php
    /system/modules/myFormHooks/mySendFormClass.php

    Benötige ich die autoload,php in jedem Fall?
    Oder ist das abhängig von z.B. Registering hooks:

    via PHP Array Configuration
    oder Using Annotations ...
    Carpe diem ...

  11. #11
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    27.290
    Partner-ID
    10107

    Standard

    Warum um Himmels Willen willst du eine Contao 3 Extension programmieren?

    Wie du einen Hook implementierst ist hier beschrieben: https://docs.contao.org/dev/framework/hooks/

    Ab Contao 4.9 musst du einfach nur das jeweilige Beispiel an den beschriebenen Ort kopieren.
    » sponsor me via GitHub or PayPal

  12. #12
    Alter Contao-Hase Avatar von Franko
    Registriert seit
    22.06.2009.
    Beiträge
    1.286
    Partner-ID
    6122
    Contao-Projekt unterstützen

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Warum um Himmels Willen willst du eine Contao 3 Extension programmieren?

    Wie du einen Hook implementierst ist hier beschrieben: https://docs.contao.org/dev/framework/hooks/

    Ab Contao 4.9 musst du einfach nur das jeweilige Beispiel an den beschriebenen Ort kopieren.
    Blöd von mir,
    hab mich an einigen Forum Beiträgen orientiert :-)
    Wenn ich also beim Beispiel der Doku bleibe
    wo muß ich die "PrepareFormDataListener.php" jetzt anlegen
    (Sorry)
    Carpe diem ...

  13. #13
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    27.290
    Partner-ID
    10107
    » sponsor me via GitHub or PayPal

  14. #14
    Alter Contao-Hase Avatar von Franko
    Registriert seit
    22.06.2009.
    Beiträge
    1.286
    Partner-ID
    6122
    Contao-Projekt unterstützen

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Ja, hm, also diesen Pfad "src ..." direkt in mein root Verzeichnis?
    Carpe diem ...

  15. #15
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    27.290
    Partner-ID
    10107

    Standard

    Ja, in deinem Contao Installationsverzeichnis.

    Vielleicht solltest du dir mal https://docs.contao.org/dev/getting-started/ durchlesen, bin eigentlich davon ausgegangen, dass du das in der Vergangenheit schon mal gemacht hast, da du ja schon öfter etwas umgesetzt hast?
    » sponsor me via GitHub or PayPal

  16. #16
    Alter Contao-Hase Avatar von Franko
    Registriert seit
    22.06.2009.
    Beiträge
    1.286
    Partner-ID
    6122
    Contao-Projekt unterstützen

    Standard 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 $fieldsForm $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 ...
    Geändert von Franko (16.06.2021 um 14:44 Uhr)
    Carpe diem ...

  17. #17
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    27.290
    Partner-ID
    10107

    Standard

    Für den Alias könntest du den Slug Service benutzen: https://docs.contao.org/dev/reference/services/#slug
    » sponsor me via GitHub or PayPal

  18. #18
    Alter Contao-Hase Avatar von Franko
    Registriert seit
    22.06.2009.
    Beiträge
    1.286
    Partner-ID
    6122
    Contao-Projekt unterstützen

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Für den Alias könntest du den Slug Service benutzen: https://docs.contao.org/dev/reference/services/#slug
    Supi !! Danke, werd ich probieren.
    Sobald ich dazu komme deine obige Anregung hinsichtlich Leads zu testen werd ichs hier beschreiben ...
    Carpe diem ...

  19. #19
    Alter Contao-Hase Avatar von Franko
    Registriert seit
    22.06.2009.
    Beiträge
    1.286
    Partner-ID
    6122
    Contao-Projekt unterstützen

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Für den Alias könntest du den Slug Service benutzen: https://docs.contao.org/dev/reference/services/#slug
    Hab ich mal eingetragen. Magst du mal drüber lesen?

    PHP-Code:
    <?php
    // src/EventListener/PrepareFormDataListener.php

    namespace App\EventListener;

    use 
    Contao\CoreBundle\ServiceAnnotation\Hook;
    use 
    Contao\Form;

    use 
    Contao\CoreBundle\Slug\Slug;


    /**
     * @Hook("prepareFormData")
     */
    class PrepareFormDataListener 
    {

      private 
    $slug;


      public function 
    __construct(Slug $slug)
      {
          
    $this->slug $slug;
      }  
      

      public function 
    __invoke(array &$submittedData, array $labels, array $fieldsForm $form): void
      
    {

        
    // form restriction 
        
    if ($form->id == "3") {

          
    // see BE info
          
    $submittedData['pid'] = 5;
          
    $submittedData['author'] = 1;
          
    $submittedData['published'] = 1;
          
          
    $tmpTitle "Reservierung - " $submittedData['title'];
          
    $submittedData['title'] = $tmpTitle;
          
    $submittedData['alias'] = $this->slug->generate($tmpTitle, ['validChars' => 'a-z0-9''locale' => 'de''delimiter' => '-']);      
         
          
    // 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";

        }
      }
    }
    ?>
    Carpe diem ...

  20. #20
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    27.290
    Partner-ID
    10107

    Standard

    Ja genau. Was du jetzt aber noch bräuchtest ist der Duplicate Callback, weil der Alias ja Unique ein muss.
    » sponsor me via GitHub or PayPal

  21. #21
    Alter Contao-Hase Avatar von Franko
    Registriert seit
    22.06.2009.
    Beiträge
    1.286
    Partner-ID
    6122
    Contao-Projekt unterstützen

    Standard

    FYI:
    Mit der obigen Umsetzung stehen dann ganz normale Events im BE zur Verfügung.

    Wie man dann im Formular für die Datums Angaben einen FE datePicker einsetzen könnte und hierbei zusätzlich die bereits vergebenen Termine ausschließen kann hatte ich hier beschrieben:
    https://community.contao.org/de/show...l=1#post402892
    Geändert von Franko (17.06.2021 um 11:07 Uhr)
    Carpe diem ...

  22. #22
    Alter Contao-Hase Avatar von Franko
    Registriert seit
    22.06.2009.
    Beiträge
    1.286
    Partner-ID
    6122
    Contao-Projekt unterstützen

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Ja genau. Was du jetzt aber noch bräuchtest ist der Duplicate Callback, weil der Alias ja Unique ein muss.
    Dazu müßte man ja, analog zum entsprechenden Doku Beispiel, eine SQL-Abfrage über die vorhandenen alias Felder der DB setzen.
    Ist das nicht sehr zeitaufwendig je Formularabfrage?

    Würde ansonsten einfach immer irgendeine random number anhängen wollen ...
    Carpe diem ...

  23. #23
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    27.290
    Partner-ID
    10107

    Standard

    Ist ja nur ein zusätzlicher Query, also nein, ist nicht zeitaufwendig.
    » sponsor me via GitHub or PayPal

  24. #24
    Alter Contao-Hase Avatar von Franko
    Registriert seit
    22.06.2009.
    Beiträge
    1.286
    Partner-ID
    6122
    Contao-Projekt unterstützen

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Ist ja nur ein zusätzlicher Query, also nein, ist nicht zeitaufwendig.
    Verstanden.
    Vielen Dank für deine Mühe.
    Für mein Beispiel nehme ich dennoch eine Zufallszahl.

    Einerseits weil die Events im geschützten Bereich nie detailliert aufgerufen werden sondern lediglich für den datePicker genutzt werden.
    Weiterhin benötige ich eh eine Art von Ticket-Nr..

    Lg
    Franko
    Carpe diem ...

  25. #25
    Alter Contao-Hase Avatar von Franko
    Registriert seit
    22.06.2009.
    Beiträge
    1.286
    Partner-ID
    6122
    Contao-Projekt unterstützen

    Standard 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.
    Carpe diem ...

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
  •