Contao: EFG – Bei mehrseitigen Formularen zu bestimmter Seite springen

Mehrseitige Formulare funktionieren mit der Contaoerweiterung EFG seit geraumer Zeit. Ein Ärgernis ist dabei, dass man in den Formularseiten nur vorwärts und rückwärts springen kann. Gerade wenn man eine Schritt-Navigation einbinden will, oder dem Nutzer auf der Übersichtsseite die Möglichkeit der Korrektur einräumen will, vermisst man schmerzlich den direkten Zugriff auf eine bestimmte Formularseite. Auf den ersten Blick ist dies mit dem EFG nicht möglich. Hier erfahrt ihr, dass diese Funktion schon implementiert ist und wie sie funktioniert.

Ich habe etwas recherchiert und bin auf folgende Lösung gestoßen:

Nutzt den Feldtyp HTML und tragt folgendes ein.

<input type="submit" name="FORM_STEP[x]" value="Korrigieren" />

Der Vorteil des HTML Feldtypen ist, dass man neben allerlei Schabernack auch einfach eigene Felder übergeben kann und diese auch geparsed (durchlaufen/analysiert) werden

Wichtig dabei:

  1. Der type muss submit sein, damit das Formular sofort abgeschickt wird
  2. Der name muss FORM_STEP[x] lauten (Großschreibung beachten!). Dabei ersetzt ihr x durch die Formularseite beginnend bei 1 für die erste Seite eures Formulars (vor dem ersten „Absende-Button mit Seitenumbruch“). Die weiteren Seiten werden entsprechend vor dem zweiten/dritten usw. „Absende-Button mit Seitenumbruch“ erzeugt
  3. Den value könnt ihr wählen wie ihr wollt, da damit in diesem Fall nur der Button benannt wird
Zur Erklärung:
  1. Der Typ des Feldes könnte auch hidden sein. Allerdings wirkt dieses Feld dann global (für die Formularseite). Es wird an den Anfang der Formularseite gesetzt und kann auch nicht überschrieben werden. Also egal, welchen Button ihr in der Formularseite/dem Formular drückt, ihr würdet auf der Seite x landen
  2. Der Typ Submit hat den Vorteil, das der Name expliziet mitgeschickt wird. Er wird – im Gegensatz zu anderen Lösungsansätzen – nicht durch folgende gleichnamige Felder überschrieben. Das Formular bricht also quasi an dieser Stelle ab, und übermittelt so als letztes den Wert und den Namen des geklickten Feldes.
  3. Zunächst scheint es unlogisch den Seitenindex als Schlüssel (key) eines Array’s (Feldes) zu übergeben. In Verbindung mit dem Umstand, dass der Wert (value) eines (Submit)Buttons mit seiner Beschriftung identisch ist, erklärt jedoch diese Herangehensweise
  4. In der Abarbeitung des EFG-Scripts passiert nun folgendes:
    • Die Felder des Formulars/der Formularseite werden durchlaufen und stetig wird danach geschaut, ob es ein Feld Namens FORM_STEP gibt
    • dieses wird daraufhin überprüft, ob es sich um ein Array handelt
    • Ist diese Abfrage positiv, wird der Key des Feldnamens als Sprungadresse für die Formularseite gewählt. Dabei gelten folgende Regeln:
      • Ist der Wert kleiner als 1 wird auf dennoch auf die erste Seite gesprungen
      • Ist der Wert größer als die Anzahl ausgefühlter Formularseiten, wird auf die folgende der zuletzt ausgefüllte Seite gesprungen. Das heißt: Klicke ich auf einen Button FORM_STEP[4] habe das  Formular aber erst bis Seite 2 ausgefüllt, lande ich auf Seite 3
Somit ist es relativ einfach eine Schritt-Navigation einzubinden:
<input type="submit" name="FORM_STEP[1]" value="Seite 1" />
<input type="submit" name="FORM_STEP[2]" value="Seite 2" />
<input type="submit" name="FORM_STEP[3]" value="Seite 3" />
<input type="submit" name="FORM_STEP[4]" value="Seite 4" />
usw.

oder mit

<input type="submit" name="FORM_STEP[1]" value="Korrektur Name" />
<input type="submit" name="FORM_STEP[2]" value="Korrektur Adresse" />
usw.

Korrekturmöglichkeiten einzubauen.