Bitte beachte, dass sich diese Dokumentation auf die neuste Version dieser Erweiterung bezieht. Wenn eine ältere Version eingesetzt wird, kann diese abweichen. Die jeweils passende Dokumentation befindet sich im Dokumentation-Verzeichnis der Erweiterung.
Feedback-Formular
Das Feedback-Formular ermöglicht es Teilnehmern, nach Abschluss eines Quiz direkt eine Rückmeldung zu geben oder Kontaktdaten zu hinterlassen. Dies ist besonders nützlich für Lead-Generierung oder zur Verbesserung der Quiz-Inhalte.
Was ist das Feedback-Formular?
Ein Feedback-Formular wird als Teil eines Quiz-Ergebnisses angezeigt. Wenn ein Teilnehmer einen bestimmten Punktebereich erreicht, kann ihm zusammen mit seinem Ergebnis ein individuell konfiguriertes Formular präsentiert werden. Die eingegebenen Daten werden validiert und per E-Mail an eine konfigurierbare Adresse gesendet.
Konfiguration und Felder
Die Definition der Formularfelder erfolgt über den Datensatz "Feedback-Feld". Ein Quiz-Ergebnis kann beliebig viele dieser Felder besitzen.
Die Definition der Felder ist in der Datei vendor/codingms/quiz/Configuration/TCA/tx_quiz_domain_model_feedbackfield.php zu finden.
- Titel (title): Die Beschriftung des Feldes im Formular (z. B. "Name" oder "Ihre Meinung").
- Key-Name (keyname): Ein interner technischer Name für das Feld (kleingeschrieben, ohne Leerzeichen). Dieser wird im E-Mail-Template und in der Validierung verwendet.
- Typ (type): Der Feldtyp bestimmt die Eingabeart:
input: Einzeiliges Textfeld.textarea: Mehrzeiliges Textfeld.email: Textfeld mit integrierter E-Mail-Validierung.select: Auswahlmenü (Drop-down).
- Pflichtfeld (required): Wenn aktiviert, muss das Feld ausgefüllt werden, bevor das Formular abgeschickt werden kann.
- Optionen (select_options): Nur für den Typ
select. Hier werden die Auswahlmöglichkeiten zeilenweise eingetragen.
Technische Logik
Die Verarbeitung des Formulars erfolgt in zwei Hauptkomponenten:
Backend: JsonApiController.php
Die Datei vendor/codingms/quiz/Classes/Controller/JsonApiController.php übernimmt die serverseitige Verarbeitung:
sendFeedbackAction: Nimmt die Formulardaten entgegen, lädt das zugehörige Quiz-Ergebnis und startet die Validierung.validateForm: Prüft die Pflichtfelder und E-Mail-Formate basierend auf der TCA-Konfiguration.sendFeedbackMail: Bereitet die E-Mail mit den eingegebenen Daten und dem Quiz-Report vor und versendet diese.
Frontend: QuizFeedbackForm.js
Die Datei vendor/codingms/quiz/Resources/Public/JavaScript/QuizFeedbackForm.js steuert das Verhalten im Browser:
- Abfangen des Submit-Events und Senden der Daten per
fetch(AJAX). - Anzeigen von Lade-Informationen während der Übertragung.
- Dynamisches Einblenden von Erfolgs- oder Fehlermeldungen.
- Visuelle Markierung von validierten Feldern (Bootstrap-Klassen
is-valid/is-invalid).
Templating
Das Aussehen des Formulars und der versendeten E-Mail kann über Fluid-Templates angepasst werden.
Formular-Partial
Datei: vendor/codingms/quiz/Resources/Private/Partials/Quiz/FeedbackForm.html
Dieses Partial rendert das eigentliche HTML-Formular. Es nutzt eine f:for-Schleife über {result.feedbackFields} und einen f:switch, um je nach Feldtyp das passende Fluid-Form-ViewHelper (z.B. f:form.textfield oder f:form.select) auszugeben. Das Formular ist standardmäßig für Bootstrap 5 optimiert.
E-Mail-Template
Datei: vendor/codingms/quiz/Resources/Private/Templates/Email/FeedbackMail.html
Dieses Template definiert den Inhalt der Benachrichtigungs-E-Mail. Folgende Variablen stehen zur Verfügung:
{subject}: Der Betreff der E-Mail.{quiz}: DasQuiz-Objekt.{quizResult}: DasQuizResult-Objekt, zu dem das Feedback gehört.{fields}: Ein Array der abgeschickten Formularfelder. Jedes Element enthält:{field.title}: Der Titel des Feldes.{field.value}: Der vom Nutzer eingegebene Wert.
{report}: Ein Array mit den Details zum Quiz-Verlauf:{report.questions}: Liste der beantworteten Fragen inkl. gegebener Antworten.{report.questionsCorrect}: Anzahl der richtig beantworteten Fragen.{report.questionsCount}: Gesamtanzahl der Fragen.{report.correctPercent}: Prozentsatz der korrekten Antworten.
