Ergebnis 1 bis 9 von 9

Thema: Eventeinträge über das Frontend

  1. #1
    Contao-Nutzer Avatar von marrxx
    Registriert seit
    06.08.2009.
    Ort
    Mölln, S-H
    Beiträge
    48

    Standard Eventeinträge über das Frontend

    Hallo liebe Community,

    ich habe mich schon in einige Themen eingeklingt, um das obengenannte zu realisieren, und auch im alten Forum gestöbert.
    https://contao.org/board/message/62423.html
    https://community.contao.org/de/show...=9445#post9445
    https://community.contao.org/de/showthread.php?t=1329
    Ich fasse hier jetzt alle meine Erkenntnisse zusammen.
    Habe es auch mit folgendem code größstenteils hinbekommen:

    Voraussetzungen:
    Typolight 2.7.2
    efg 1.12.0
    PHP-Code:
    /system/config/dcaconfig.php
    $GLOBALS
    ['TL_HOOKS']['processFormData']['event1'] = array('eventEfgFuncs''processFormDataEvent'); 
    PHP-Code:
    /system/modules/efg/eventEfgFuncs.php
    <?php
        
    class eventEfgFuncs extends Frontend
        
    {
     
            public function 
    processFormDataEvent($arrPost$arrForm$arrFiles)
            {
                if (
    $arrForm['id'] == '4'
                {
                    
    $startDate strtotime($this->Input->post('startDate'));
                    
    $endDate strtotime($this->Input->post('endDate'));
                    
    $this->import('FrontendUser');
                    
    $arrEvent = array
                    (
                        
    'pid' => $this->Input->post('pid'), 
                        
    'tstamp' => time(), 
                        
    'startDate' => $startDate
                        
    'startTime' => $startDate,
                        
    'endDate' => $endDate,
                        
    'title' => $this->Input->post('title'),
                        
    'alias' => $this->Input->post('alias'),
                        
    'published' =>  $this->Input->post('published'),
                        
    'source' => $this->Input->post('source'),
                        
    'author' => $this->FrontendUser->id,
                        
    'details' => $this->Input->post('details')
                    );
         
                    
    $objInsert $this->Database->prepare('INSERT INTO tl_calendar_events %s')->set($arrEvent)->execute();
                    return 
    $arrEvent;
                }    
            }            
        }
    ?>
    Mit dem Formulargenerator ein Formular mit den entsprechenden Feldname erstellt.
    Wenn ich das Formular ausfülle, werden die Daten auch in die Datenbank geschrieben. Und sie werden im Kalender angezeigt.

    So jetzt kommen meine Probleme bzw. Fragen:
    1. Sobald ich das Formular absende, kommt nur noch ein weißer Bildschirm!?
    Das gleich gilt auch für alle anderen Formulare, da ja jedes Formular an processFormData übergeben wird,
    auch wenn das Formular wegen der IF ID nicht die Funktion durchläuft.
    Bei Formularen mit eMail-Funktion werden alle Mails doppelt versand.

    2. bei mir funktioniert der Hook-Aufruf
    $GLOBALS['TL_HOOKS']['processefgFormData']['event1'] = array('eventEfgFuncs', 'processFormDataEvent');
    nicht. In den sonstigen Themen steht mal processefgFormData und mal processFormData. Was ist der Unterschied?

    3. Dadurch das ich das Feld "Author" mit der ID der Frontend-Users fülle (was auch sauber in die Datenbank geschrieben wird) im Kalender aber die ID des Backend-Users angezogen wird, funktioniert das ganze mit der Anzeige nicht
    (außer ich lege alle Frontenduser mit der gleichen ID im Backend an).

    So, ich hoffe ich habe nichts vergessen, und das was ich geschrieben habe ist verständlich.
    Wer kann mir helfen?

    Gruß
    Geändert von marrxx (12.08.2009 um 21:01 Uhr)

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

    Standard

    Hallo marrxx,

    Wer kann mir helfen?
    ich versuch's mal.

    Erstmal zu Frage 2:
    Es gibt zwei Hooks, nämlich processFormData und processEfgFormData (nicht processefgFormData)

    Der erste ist ein TYPOlight-(Standard-)Hook, dieser wird "getriggert", nachdem ein Formular "abgesendet" wurde, übergibt an die Callback-Funktion drei Paramter in folgender Reihenfolge:
    $arrPost: die aus dem Fromular übermittelten Daten
    $arrForm: quasi die "Konfiguration" des Formulars (Einstellungen aus Formulargenerator)
    $arrFiles: ggf. per Upload-Feldern hochgeladene Dateien
    Der Hook erwartet keinen Rückgabewert der Callback-Funktion.

    EFG nutzt genau diesen Hook um weitere Funktionen zu integrieren (Daten speichern, Mails versenden...), und stellt hier wiederum den Hook processEfgFormData bereit.
    Dieser übergibt der Callback-Funktion vier(!) Parameter, in folgender Reihenfolge:
    $arrToSave: quasi $arrPost, (die "zu speichernden") aus dem Formular übermittelten Daten
    $arrFiles:ggf. Dateien aus Upload-Feldern
    $intOldId: bei Frontend-Bearbeitung eines Formulardaten-Eintrags dessen ID
    (intOldId deshalb, weil im Falle der Frontend-Bearbeitung der Datensatz komplett neu angelegt wird, somit eine neue ID erhält, anschließend der ursprüngliche, bearbeitete Datensatz gelöscht wird)
    $arrForm: siehe oben
    Der Hook erwartet einen Rückgabewert, nämlich das (optional veränderte) Array $arrToSave der übermittelten/zu speichernden Daten.
    Dadurch können Daten vor der weiteren Verwendung in (EFG-)Bestätigungs-/Benachrichtigungs-Mails oder Speichern in der "Formulardaten"-Tabelle "manipuliert" werden.

    Zu Frage 1:
    Da Du den processFormData-Hook verwendest, ist das
    PHP-Code:
       return $arrEvent
    unnötig, dürfte aber keine Fehler verursachen.
    Wenn Du allerdings den processEfgFormData mit derselben Funktion verwenden würdest, wäre hier ein Fehler, da Du ein Array zurückgibst, das nichts mehr mit dem übergebenen $arrToSave (bzw. Funktions-Parameter $arrPost) zu tun hat, und somit bei der Weiterverarbeitung seitens EFG durchaus einen Fehler verursachen dürfte.

    Doppelter Versand?
    Die Überprüfung auf die ID sollte genügen, da die Funktion erst nach erfolgreichem "Versenden" des Formulars "getriggert" wird.
    Aber, Achtung:
    Normalerweise wird die "Registrierung" der Callback-Funktion (wie im Dev-Wiki beschrieben) in einer Datei config.php in einem Modul-Verzeichnis (z.B. system/modules/ZZZ_MODULNAME/config.php) vorgenommen:
    PHP-Code:
    $GLOBALS['TL_HOOKS']['processFormData'][] = array('MyClass''processFormData'); 
    Sofern kein eigenes Modulverzeichnis angelegt werden soll, kann der Eintrag auch in der system/config/dcaconfig.php erfolgen, z.B.:
    PHP-Code:
    $GLOBALS['TL_HOOKS']['processFormData']['MY_EVENT'] = array('MyClass''processFormData'); 
    Wichtig ist dann allerdings, ['MY_EVENT'] statt [], da andernfalls die Callback-Funktion mehrfach registriert und ausgeführt würde, da die Datei dcaconfig.php i.d.R. mehrfach "geladen" (includiert) wird.
    Scheint bei Dir allerdings auch zu stimmen, Du verwendest den Schlüssel 'event1' (!?).

    Hast Du ein paar Details zu den weiteren Einstellungen des Formulars und zur "Weiterleiten zu"-Seite?

    Zu Frage 3:
    (kann ich nicht ganz folgen, habe aber auch die zitierten Themen nicht alle gelesen und kenne das "Endziel" nicht)
    Die ID des Frontend-Users als "Author" einzutragen ist sicherlich nicht wirklich ideal, ebenfalls die Variante, jedes (FE-)Mitglied zwecks gleicher ID auch als (BE-)Benutzer anzulegen. Das sind halt nunmal "zwei Paar Stiefel".

    Hoffe, ich konnte weiterhelfen

    Schöne Grüße
    Thomas

  3. #3
    Contao-Nutzer Avatar von marrxx
    Registriert seit
    06.08.2009.
    Ort
    Mölln, S-H
    Beiträge
    48

    Standard

    Hallo Thomas,
    ich finde es super, das Du Dir immer die Zeit nimmst, ausführlich auf die Themen einzugehen.
    Leider konnte ich anhand Deiner Erklärungen meine Fehler/Probleme nicht beheben.
    Wenn ich es richtig verstanden haben, reicht der processFormData-Hook für mich aus. Funktioniert ja auch einwandfrei, bis auf den "weißen Bildschirm" nachdem ich das Formular(e) abgesendet habe.

    Code:
    return $arrEvent;
    habe ich aus dem Code entfernt, brachte aber auch keine Besserung.

    Das mit den Frontend bzw. Backend ID's habe ich so umgangen, das ich im Feld "title" der `tl_calendar_events` Tabelle den InsertTag {{user::username}} vorbelegt habe. Das reicht mir völlig aus.

    Leider ist das mit dem "weißen Bildschirm" ärgerlich. Meine Formular sieht folgendermaßen aus:
    Code:
    Id:                                           4
    Änderungsdatum:                  16.08.2009 23:50
    Titel:                                       event
    Weiterleitungsseite:               51
    Per E-Mail versenden:           nein
    Empfänger-Adresse: 	
    Betreff: 	
    Datenformat:                         Rohdaten
    Leere Felder auslassen:       nein
    Eingaben speichern:             ja
    Zieltabelle:                             tl_calendar_events
    Übertragungsmethode:        POST
    CSS-Id/Klasse: 	,
    Formulartyp:                         Standard-Formular
    Tabelle speichern: 	
    Verwendung einer Filter-Überprüfung: 	nein
    Filterfeld auswählen: 	
    Verwendung der Eindeutigkeits-Überprüfung: 	nein
    Eindeutiges Feld auswählen.: 	
    Verwendung der Anzahl-Überprüfung: 	nein
    Feldanzahl auswählen: 	
    Werte für die maximale Anzahl: 	
    Gesamtanzahl-Feld auswählen: 	
    Anzeigen der offenen Anzahl: 	ja
    Bestätigungs-E-mail hinzufügen: 	nein
    Feld für Bestätigungs-E-mail: 	email
    Bestätigung des Absenders: 	xxxxxx@xxxxx.xx
    Betreff für Bestätigung: 	
    Bestätigung des HTML-Templates: 	
    Formular-Id: 	4
    Tabellenloses Layout: 	nein
    HTML-Tags erlauben: 	nein
    Daten im Modul "Formular-Daten" speichern: 	nein
    Options-Werte speichern: 	nein
    Feldwerte exportieren: 	nein
    Feldnamen exportieren: 	nein
    Formularfeld für Alias: 	0
    Bestätigung per E-Mail versenden: 	nein
    Formularfeld mit E-Mail-Adresse des Empfängers: 	
    Empfänger: 	
    Absender: 	
    Betreff: 	
    Text der Bestätigungs-E-Mail: 	
    HTML-Vorlage für die Bestätigungs-E-Mail: 	
    Leere Felder auslassen: 	nein
    Per E-Mail versenden (formatierter Text / HTML): 	nein
    Empfänger-Adresse: 	
    Betreff: 	
    Text der E-Mail: 	
    HTML-Vorlage für die E-Mail: 	
    Leere Felder auslassen: 	nein
    'sorry für die Formatierung'

    Das mit dem doppelten eMail-Versand hat sich komischerweise von allein gelöst. Es geht aufeinmal!?!?!?!

    Kurzum gesagt, ist alles bestens bis auf die "weiße Seite".
    Ich bin ratlos, ist wahrscheinlich nur eine Kleinigkeit.
    Ich habe schon diverse Stunden "Trail and Error" hinter mir.
    Das kann doch wohl nicht so schwer sein.
    Vielleicht hast Du noch eine Geistesblitz????

    Gruß

    P.S.
    Achso, hab noch was vergessen, habe es auch mit dem Hook processEfgFormData versucht, bekommen dann aber immer eine Fehlermeldung:
    Code:
    ... missing argument 4....
    Geändert von marrxx (17.08.2009 um 19:17 Uhr)

  4. #4
    Contao-Fan Avatar von Stranger
    Registriert seit
    20.06.2009.
    Ort
    Blankenburg
    Beiträge
    746
    Partner-ID
    5635
    User beschenken
    Wunschliste

    Standard

    Hallo marxxx,

    ich vermute das ist dasselbe Problem wie hier:
    https://community.contao.org/de/showthread.php?t=1271

    Das geht nämlich leider immer noch nicht.
    Du willst dich bei mir bedanken?
    Ich freue mich über Geschenke von meiner Amazon-Wunschliste.

    Contao-Anwender seit 2008
    Contao-Entwickler seit 2013, mehr als 50 Contao Erweiterungen programmiert

    Mein Unternehmen aus Blankenburg (Harz): Fast & Media

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

    Standard

    Hallo marxx, hallo Stranger,

    ch vermute das ist dasselbe Problem wie hier:
    https://community.contao.org/de/showthread.php?t=1271
    das denke ich nicht, da marxx (soweit ich sehe) gar nicht versucht, die "Weiterleiten zu"-Seite o.ä. per Callback zu "manipulieren".

    @marxx: Was mich an den Einstellungen im Formular wundert ist, dass Du einerseits die (TYPOlight Standard) Option "Eingaben speichern" mit Zieltabelle 'tl_calendar_events' verwendest, andererseits dann aber per Callback (TL-Standard-Hook) processFormData per eigenem Database-Insert einen Event einträgst.
    Wenn beide Funktionen korrekt arbeiten, solltest Du anschließend zwei neue Events im Kalender haben?
    Mein Verdacht wäre eher, dass genau hier das Problem liegt:
    Entweder kann die "automatische" Speicherung nicht erfolgen, da z.B. Namen der Formularfelder nicht mit denen in der Tabelle übereinstimmen,
    oder Dein "manuelles" Speichern scheitert (woher kommt z.B. 'pid' oder 'alias' ?)
    und die Folge ist der "Abbruch".

    Bekommst Du irgendwelche Fehlermeldungen, wenn in den Systemeinstellungen die Fehleranzeige aktiviert ist? Oder Meldungen im System-Log?
    Was ist die Weiterleitungs-Seite ID 51? Kann hier ein Problem verursacht werden?

    P.S.
    Achso, hab noch was vergessen, habe es auch mit dem Hook processEfgFormData versucht, bekommen dann aber immer eine Fehlermeldung:
    Code:
    ... missing argument 4....
    Ist nachvollziehbar, hatte ja die Unterschiede der beiden Hooks erläutert, u.a. unterschiedliche Anzahl und Reihenfolge der Parameter.

    Schöne Grüße
    Thomas
    Geändert von tom (19.08.2009 um 11:09 Uhr)

  6. #6
    Contao-Nutzer Avatar von marrxx
    Registriert seit
    06.08.2009.
    Ort
    Mölln, S-H
    Beiträge
    48

    Standard

    Zitat Zitat von tom Beitrag anzeigen
    Was mich an den Einstellungen im Formular wundert ist, dass Du einerseits die (TYPOlight Standard) Option "Eingaben speichern" mit Zieltabelle 'tl_calendar_events' verwendest, andererseits dann aber per Callback (TL-Standard-Hook) processFormData per eigenem Database-Insert einen Event einträgst.....
    Hallo Thomas,
    ja, Du hast recht, ich hatte vergessen, daß ich es wieder umgestellt habe(processFormData deregistriert) und ich die Daten erstmal wieder über die Option "Eingaben speichern" in die Tabelle schreiben lasse(auch wenn sie dann im falschem Format sind), weil ich (wir) die Problematik mit dem "weißen Bildschirm" nicht in den Griff bekomme(n).
    Leider bekommen ich weder eine Fehlermeldung, noch sind irgendwelche Logeinträge vorhanden!
    Die Weiterleitungs-Seite ID 51 ist einfach die Seite für Kalenderleser, also der Kalender in Tabellenform, da kann das Problem also auch nicht liegen, weil die Seite wird sonst einwandfrei angezeigt.
    Ich hoffe, irgendjemand hat noch die zündende Idee, da diese Funktion (Kalendereinträge für das Frontend) von meinem Projekt unbedingt gewünscht wird.
    Gruß

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

    Standard

    Hallo marxx,

    nu muss ich nochmal nachfragen:
    was bedeutet in Deinem Fall "weiße Seite"?
    Ist nur der "Content-Bereich" leer, Navigation etc. aber sichtbar?
    Oder ist tatsächlich die komplette Seite leer?

    ...daß ich es wieder umgestellt habe(processFormData deregistriert)
    dann kann auch Deine eigene Weiterleitungs-Funktion (wenn die überhaupt von Dir vorgesehen oder gewünscht ist, ist mir nicht so recht ersichtlich?) nicht aufgerufen werden und somit nicht weiterleiten.
    Falls Du dies schonmal versucht haben solltest:
    per Hook processEfgFormData kannst Du die "manuelle" Weiterleitung nicht realisieren, dies geht nur in der beschriebenen Weise per processFormData.

    Laut Deiner Formular-Konfiguration verwendest Du ganz normal "Weiterleiten zu" des Formulargenerators.
    Und mittlerweile auch nur die Standard-Funktion "Eingaben speichern".
    Wenn Du die Option "Eingaben speichern" deaktivierst, funktioniert die Weiterleitung zur Kalenderseite?

    Kann man das Problem "im Betrieb" sehen?
    Kannst Du mir evtl. gar einen Zugang (ftp und Backend) ermöglichen?

    Schöne Grüße
    Thomas
    Geändert von tom (20.08.2009 um 21:44 Uhr)

  8. #8
    Contao-Nutzer Avatar von marrxx
    Registriert seit
    06.08.2009.
    Ort
    Mölln, S-H
    Beiträge
    48

    Standard

    Zitat Zitat von tom Beitrag anzeigen
    Kann man das Problem "im Betrieb" sehen?
    Kannst Du mir evtl. gar einen Zugang (ftp und Backend) ermöglichen?
    Hallo Thomas,

    Daten sind per PN unterwegs.

    Gruß

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

    Standard

    Hallo,

    ich verfolge die Diskussionen zum Thema "Events / Eintrag per Formular" und hoffe, dass mir hier jemand helfen kann.

    Ich habe ein Formular angelegt, das die bisherigen Felder der Events sowie noch einige neue Felder mit der EFG-Erweiterung in die "tl_calendar_events" überträgt. Die Einträge sind zunächst nicht freigeschaltet und der Admin erhält eine eMail mit den Daten zur Freigabe. Anschließend erfolgt die Ausgabe über ein modifiziertes Template, welches auch die zusätzlichen Felder ausgibt.

    Das Ganze funktioniert einwandfrei, geht allerdings (was die neuen Felder betrifft) komplett am Backend-Admin vorbei. Wie kann ich im Backend unter "Events" neue Felder anlegen und mir die DB-Werte zur Modifikation ausgeben lassen?

    Danke und LG
    hangover
    Geändert von bird (25.09.2009 um 15:04 Uhr)

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. Antworten: 57
    Letzter Beitrag: 19.08.2016, 13:54
  2. Antworten: 7
    Letzter Beitrag: 28.05.2011, 13:27
  3. Antworten: 4
    Letzter Beitrag: 28.11.2010, 21:45
  4. Über Frontend Artikel bearbeiten
    Von GermanDevil im Forum Sonstiges zu Contao
    Antworten: 3
    Letzter Beitrag: 04.12.2009, 17:33
  5. Dateimanagement über Frontend
    Von Wolfi im Forum Bilder/Dateien
    Antworten: 2
    Letzter Beitrag: 06.07.2009, 12:40

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •