Finisher für TYPO3-Formulare selektiv überschreiben

Bestimmte Einstellungen in Finishern von TYPO3 Formularen überschreiben

Wir haben ein TYPO3 Formular mit einem Finisher für eine Datenübermittlung an eine Schnittstelle gebaut. Da sich die Konfiguration für die Schnittstelle ändern kann, kann man diese mittels "Finisher-Einstellungen überschreiben" im Plugin überschreiben. In anderen Finishern, beispielsweise "EmailToSender" sollten aber bestimmte Dinge automatisch gesetzt werden und natürlich nicht im Plugin wieder überschrieben werden. Wie das geht ohne gleich einen eigenen Finisher zu schreiben? Keine Angst, ich sags euch. 

Erst einmal noch etwas genauer, was unser Problem war. Grundsätzlich ist es so, wenn die Finisher-Einstellungen im Plugin überschrieben werden sollen und die Checkbox gesetzt wird, TYPO3 in der Datenbank das pi_flexform Feld mit den einzelnen Eigenschaften aus den Finisher Default Angaben aus der Yaml Konfiguration befüllt.

Das führte aber dazu, dass unser dynamisch im TypoScript gesetzter Betreff für die Mail am Ende einfach hart überschrieben wird. Die Daten (Standardwerte aus der yaml Konfiguration) stehen am Ende in der Datenbank, und so ist es nur logisch, dass diese Werte eben überschrieben werden.

Wir mussten also verhindern, dass die Standardwerte aus der Yaml Konfiguration nicht in das pi_flexform geschrieben werden. Zumindest für diesen einen Finisher. 

Den entscheidenden Hinweis fand sich dann in der Doku zu "Form": https://docs.typo3.org/c/typo3/cms-form/13.4/en-us/I/Concepts/Finishers/CustomFinisherImplementations/Index.html#add-finisher-to-backend-ui


prototypes:
  standard:
    finishersDefinition:
      CustomFinisher:
        formEditor:
          iconIdentifier: 'form-finisher'
          label: 'Custom Finisher'
          predefinedDefaults:
            options:
              customField: ''
              email: ''
        # displayed when overriding finisher settings
        FormEngine:
          label: 'Custom Finisher'
          elements:
            customField:
              label: 'Custom Field'
              config:
                type: 'text'
            email:
              label: 'Subscribers email'
              config:
                type: 'text'

Wir haben also in unserem prototype die Yaml Konfiguration des Standard-EmailToSender Finishers kopiert, den Finisher umbenannt (die zu nutzende Klasse ist natürlich die gleiche geblieben) und dann in predefinedDefaults und elements die Felder rausgelöscht, die wir nicht überschreibbar haben wollten. 

Jetzt noch den Finisher in unserem Formular angeben und zack… bums… Gab es in den Plugineinstellungen nur noch unsere gewünschten Felder bei den Überschreibungen.

Ich weiß, das ist sicher nicht die schönste Lösung. Ein Nachteil, der sofort auffällt: Wenn sich an der Yaml Konfiguration für den EmailToSender-Finisher im Core etwas ändert (durch ein Core Update) muss man diese Änderungen natürlich mitbekommen und nachpflegen.

Am Ende hat hier das Verhältnis von Aufwand und Nutzen den Ausschlag gegeben. Das Schreiben dieses Blogartikels hat am Ende länger gedauert als diese Anforderung für die Finisher umzusetzen ;-).

Wie immer könnt Ihr gern einen Kommentar zum Thema hinterlassen.


Kommentare

Keine Kommentare


Kommentar schreiben

* Diese Felder sind erforderlich