Viele Jahre lang war Typo3 Formhandler das „Schweizer Messer“ für uns in Sachen Formulare. Gerade die Möglichkeit, verschieden Hooks / Finisher und Preprocessoren zu implementieren machte Formhandler zu einer perfekten Basis aller komplizieren Wünsche und Anforderungen.
Eines Tages überraschte uns ein rotes Warnschild auf der Formhandler-Webseite, dass Formhandler nicht weiter entwickelt wird. Zeit sich nach Alternativen umzuschauen.
PowerMail hatten wir ehrlich gesagt über Jahre vernachlässigt: Es wirkte eher wie ein „Formularwerkzeug für Redakteure“ und schien eher unflexibel und ungestaltbar. Aber weit gefehlt: Seit langer Zeit bietet auch PowerMail verschiedene Finisher – und spätestens seit der Umstellung auf Fluid und Bootstrap gibt es eigentlich keine Ausreden mehr.
Hier ein kurzes Beispiel für einen möglichen Ansatz, mit vielen verschiedenen PowerMail-Formularen umzugehen, die unterschiedliche Konfigurationen und Finisher aufrufen sollen.
Für Suchmaschinen: PowerMail Finisher nur für bestimmte Formulare. Eigene Mail-Funktion PowerMail. PowerMail Finisher Beispiel mit mehreren Formularen.
PowerMail Finisher: Aufruf des eigenen Finishers
Zunächst muss der Finisher „scharf“ geschaltet werden. Das geht mit wenigen Zeilen TypoScript Setup:
plugin.tx_powermail.settings.setup {
finishers {
1 {
class = Meine\Extension\Finisher\PowerMailFinisher
}
}
}
Danach werden ALLE Anfragen NACH dem Versand der E-Mail zusätzlich noch an unseren Finisher geschickt. Für den Fall, dass die Daten VOR dem Versand verändert werden sollen, gibt es übrigens auch einen PowerMail DataProcessor
Problem: Leider lässt sich so aber nicht steuern, wann und wo der Finisher nicht aufgerufen werden soll. Klar: Page-Conditions wären eine Möglichkeit:
[PIDinRootline = 123]
plugin.tx_powermail.settings.setup.finishers.1 >
[global]
Nur leider: Spätestens, wenn das Formular auf eine anderer Seite kopiert wird gibt es ein Problem.
PowerMail Finisher: Konfiguration für einzelne Formulare
Hier gehen wir einen anderen Weg: Per TypoScript Setup definieren wir für jedes PowerMail-Formular beliebige Variablen und Einstellungen, die wir später verwenden wollen. KEY ist dabei die UID des PowerMail-Formulars (NICHT die tt_content.uid !). Lassen wir eine Key aus, wird später auch der Finisher abgebrochen.
plugin.tx_powermail.settings.setup.finishers.1.config {
# KEY ist die uid des PowerMail-Formulars (NICHT tt_content.uid)
# Konfiguration für das PowerMail-Formular mit der uid=1
1 {
beispiel = wert
noch_ein_beispiel {
was = immer
...
}
}
# Konfiguration für das PowerMail-Formular mit der uid=2
2 {
...
}
# Formular Nr. 3 ist ein normales Kontakt-Formular.
# Wir lassen hier einfach die Konfiguration aus.
# Konfiguration für das PowerMail-Formular mit der uid=4
4 {
...
}
}
PowerMail Finisher
Der PowerMail Finisher selbst übernimmt dann die Auswertung und ggf. den Abbruch des Finishings, falls es keine Konfiguration für das PowerMail-Formular mit der aktuellen uid gibt:
namespace Meine\Extension\Finisher;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Extbase\Utility\DebuggerUtility;
class PowerMailFinisher extends \In2code\Powermail\Finisher\AbstractFinisher {
/**
* @var \In2code\Powermail\Domain\Repository\MailRepository
* @inject
*/
protected $mailRepository;
/**
* @var \TYPO3\CMS\Extbase\Object\ObjectManager
* @inject
*/
protected $objectManager;
public function myFinisher() {
// Settings und Konfigurationen
$settings = $this->getSettings();
$configuration = $this->getConfiguration();
// Ein cObject gibt es auch
$cObjData = $this->contentObject->data;
// Beispiel: Gerenderte Mail holen
$mail = $this->getMail();
// Beispiel für den Zugriff auf FlexForm-Werte
$ffService = GeneralUtility::makeInstance( \TYPO3\CMS\Extbase\Service\FlexFormService::class );
$ffData = $ffService->convertFlexFormContentToArray( $cObjData['pi_flexform'] );
// Die eigentliche uid des PowerMail-Formulars
$powerMailFormUid = $settings['main']['form'];
// Die spezielle Konfiguration für dieses Formular, falls vorhanden
$mailformConfig = $configuration[$powerMailFormUid];
// Wenn keine Konfiguration vorhanden, dann Abbruch!
if (!$mailformConfig) return;
// Zugriff auf Formular-Daten
$formData = $this->mailRepository->getVariablesWithMarkersFromMail($mail);
//
// und jetzt: Austoben!!
//
return true;
}
}
Danke für das anschauliche Beispiel!