Skip to main navigation Skip to main content Skip to page footer

Formular-Definition

Formulare werden im Frontend über TypoScript definiert. Dabei wird unterschieden zwischen Formularen zum Erstellen (Create) und Bearbeiten (Edit) von Datensätzen. Die Basis-Konfiguration erfolgt unter plugin.tx_modules.settings.forms.

Grundkonfiguration

Jedes Formular wird über einen eindeutigen Identifier konfiguriert (z.B. addressCreate oder address).

plugin.tx_modules.settings.forms.myFormIdentifier {
    # Datenbank-Tabelle, auf die sich das Formular bezieht
    table = tx_extension_domain_model_example

    # Speicherort für neue Datensätze (nur bei Erstellung relevant)
    storagePid = 123

    # Standard-Werte für neue Datensätze (nur bei Erstellung relevant)
    defaults {
        hidden = 0
        deleted = 0
        # Typ des Models, falls notwendig (vollständiger Klassenname)
        # type = CodingMs\Extension\Domain\Model\Example
    }

    # Benachrichtigung beim Speichern
    mailOnSave {
        active = 1
        subject = Neuer Datensatz erstellt
        fromEmail = sender@example.com
        toEmail = receiver@example.com
    }

    # Nachrichten für den Benutzer
    messages {
        error {
            title = Fehler
            savingFailed = Bitte überprüfen Sie Ihre Eingaben.
        }
        success {
            title = Erfolg
            successfullySaved = Ihre Daten wurden erfolgreich gespeichert.
        }
    }

    # Definition der Formular-Felder
    fieldsets {
        # ...
    }
}

Fieldsets und Felder

Das Formular wird in fieldsets unterteilt. Üblicherweise gibt es ein general Fieldset für die Eingabefelder und ein buttons Fieldset für die Aktionen.

Felder werden meist von vordefinierten Presets kopiert, die in plugin.tx_modules.presets.fields bereitgestellt werden.

    fieldsets {
        general < plugin.tx_modules.presets.fieldsets.normal
        general {
            label = Allgemein
            fields {
                # Beispiel für ein Textfeld
                company < plugin.tx_modules.presets.fields.input
                company {
                    label = Firma
                    placeholder = Musterfirma GmbH
                    required = 0
                    validation {
                        NotEmpty = Bitte geben Sie eine Firma ein
                    }
                }
            }
        }

        # Buttons am Ende des Formulars
        buttons < plugin.tx_modules.presets.fieldsets.buttons
        buttons {
            fields {
                submit < plugin.tx_modules.presets.fields.submit
                submit {
                    label = Speichern
                    css.class.wrapper = form-group form-input-submit float-start me-1
                }
                cancelAndBackToListButton < plugin.tx_modules.presets.fields.cancelAndBackToListButton
                cancelAndBackToListButton {
                    label = Abbrechen
                    css.class.wrapper = form-group form-input-submit float-start me-1
                }
            }
        }
    }

Verfügbare Feld-Typen (Presets)

Die folgenden Presets stehen unter plugin.tx_modules.presets.fields zur Verfügung:

  • input - Einfaches Textfeld
  • textarea - Mehrzeiliges Textfeld
  • rte - Rich Text Editor
  • checkbox - Checkbox (z.B. für AGB oder Boolean-Werte)
  • checkboxes - Mehrfachauswahl via Checkboxen (Relationen)
  • select - Auswahlbox (Dropdown)
  • selectCountry - Länderauswahl
  • files - Datei-Upload (benötigt entsprechende Konfiguration für Relationen)
  • inputDate - Datumsfeld
  • inputDateTime - Datums- und Zeitfeld
  • inputEmail - E-Mail Feld mit Validierung
  • inputSlug - URL-Segment Feld
  • hidden - Verstecktes Feld

Validierung

Validatoren können pro Feld im validation Block definiert werden. Der Key ist der Name des Validators, der Value ist die Fehlermeldung, die angezeigt wird, wenn die Validierung fehlschlägt.

Mehr dazu unter Verfügbare Validatoren.

validation {
    NotEmpty = Dieses Feld ist ein Pflichtfeld
    Email = Bitte geben Sie eine gültige E-Mail Adresse ein
}

Mehrsprachigkeit

Die Beschriftungen und Fehlermeldungen können via TypoScript Conditions sprachabhängig überschrieben werden:

[siteLanguage("locale") == "de-DE"]
plugin.tx_modules.settings.forms.myFormIdentifier {
    messages {
        success.successfullySaved = Datensatz gespeichert
    }
    fieldsets {
        general {
            label = Allgemein
            fields {
                company {
                    label = Firma
                    validation {
                        NotEmpty = Bitte geben Sie eine Firma ein
                    }
                }
            }
        }
    }
}
[GLOBAL]
Warenkorb 0 Produkte

Dieses Demo wurde gebaut mit*

EXT:bootstrap_package für das Site-Package aka Theme basierend auf Bootstrap 5.

EXT:modules für Benutzer-Plugins wie Benutzerprofile, Registrierung, Benutzeradressen und mehr.

EXT:shop für die gesamte Shop-Funktionalität.

EXT:questions für die FAQ-Seite und die in den Produktdetailseiten verlinkten FAQs.

EXT:glossaries für die Glossare und Definitionen.

EXT:fluid_fpdf zur Erstellung von Rechnungen, Lieferscheinen, Produktblättern und mehr.

EXT:parsedown_extra zum Rendern der Erweiterungsdokumentation von Markdown in HTML.

* Es wurden ausschließlich integrierte Einstellungen mit site-settings & TypoScript vorgenommen – keine Templates oder andere Dateien wurden geändert oder überschrieben!