yakamara / yform

YForm für REDAXO 5 – Formulare im Frontend und Backend mit Verwaltung von Datenbank-Tabellen.
MIT License
77 stars 55 forks source link

E-Mail Templates / Parsing von REX_YFORM_DATA bei nicht vorhandenen Feldern #1355

Closed ischfr closed 1 year ago

ischfr commented 1 year ago

Ich versuche, aus einem Modul heraus Teile (bzw. Felder) eines Formulars im Frontend auszusparen, um auf einfache Weise unterschiedliche Formularvarianten mit dem selben Modul erzeugen zu können.

Im Modul-Input steuere ich, welche Felder abgeschaltet werden, wodurch diese YForm Felddefinitionen im Output dann ausgespart werden. Um das auch im E-Mail-Template zu realisieren, übergebe ich per Hidden-Field eine Liste aller genutzten Feldnamen.

Im E-Mail-Template prüfe ich mittels PHP für jedes der maximal zu erwartenden Felder, ob es in der Liste vorhanden ist. Ansonsten wird es nicht in den E-Mail-Text ausgegeben. Das funktioniert so weit – bis auf eine Sache:

Vor dem Ausführen der PHP-Codes im Template werden anscheinend zunächst die REX_YFORM_DATA-Platzhalter geparst. Wenn z.B. REX_YFORM_DATA[field="anrede"] auf ein nicht vorhandenes Feld verweist, dann erzeugt das im Log:

_Warning: Undefined array key "anrede" (Datei: redaxo/src/addons/yform/plugins/email/lib/var_yformdata.php Zeile:20)

Anscheinend wird beim Parsen vor dem Zugriff auf den Feldinhalt nicht geprüft, ob das Feld überhaupt existiert.

Dass das Feld nach dem o.g. Listenableich gar nicht ausgegeben wird, fällt wohl nicht ins Gewicht, da das Parsen vorher über den gesamten Text/Code passiert.

Gibt es eine Lösung, um das zu vermeiden?

Könnte man evtl. einen Parameter vorsehen, um beim Parsen für bestimmte Felder zuzulassen, dass diese nicht existieren – wenn das ein zu erwartender Zustand ist?

Oder gibt es einen anderen Weg, um das ohne Warning zu erreichen?

dergel commented 1 year ago

Ist nun drin .. Gerne mit aktueller Github Version testen

ischfr commented 1 year ago

Prima - danke!!

Das scheint zu funktionieren. Ich kriege nun beim Versenden keine Warnmeldungen mehr, wenn ich im E-Mail-Template per REX_YFORM_DATA-Platzhalter auf nicht-vorhandene Felder prüfe.