Hallo Heinz,
dieses Verhalten ist bekannt und bislang so gewollt.
Mit allen SQL-Feldern gibt es bezüglich dem Label ein grundsätzliches Problem.
In der Datenbank wird in der Datentabelle für alle Felder immer allein der (Options-)Value gespeichert.
Bei statischen Options-Listen, sind alle Options-Label in der Feld-Konfiguration gespeichert und können bei der Platzhalter-Ersetzung verwendet werden.
Bei SQL-Feldern werden die Options-Label nicht in der Feld-Konfiguration gespeichert, da sie erst bei der Anzeige des Formulars dynamisch durch Ausführung des SQL-Statements erzeugt werden.
Bislang gibt es noch keinen Mechanismus, der die Options-Label von SQL-Feldern zum Zeitpunkt der Parameter-Ersetzung zur Verfügung stellt.
Das kann auch durchaus schief gehen bzw. gar nicht möglich sein:
- der Laufzeitkontext ist ein anderer und Parameter daraus können fehlen oder andere Werte haben
- die Daten, auf das sich das SQL-Statement bezieht, können sich geändert haben
- u.s.w
Außerdem macht es einen großen Unterschied, zu welchem Zeitpunkt die Parameter-Ersetzung abläuft:
- unmittelbar nach Absenden des Formulars (E-Mail, PDF-Anhang, PDF-Link): Feld-Werte kommen aus der User-Session
- zeitlich versetzt (PDF-Erzeugung als Administrator): Feld-Werte kommen aus der Daten-Tabelle
Ich habe trotzdem mal einen Issue zur Entwicklung für die Wunschliste angelegt:
Issue [VF-830] Forum: SQL-Fields: Provide SQL-based option-labels to parameter replacement (as far as possible)
Wie und wann wir das realisieren können, ist im Moment nicht abzuschätzen.
Wenn wir das neue Feature releasen, wirst du explizit über das Release hier im Thema informiert.
Vielen Dank nochmal für deinen Vorstoß!
Es gibt für dich aber durchaus einen Workaround.
Mit folgendem kurzen PHP-Code, plaziert in einem Visforms Custom-Plugin, kannst du für ein gegebenes Formular (ID) und für ein gegebenes Feld (ID) das Ausgabeformat beeinflussen.
Der Code reagiert auf beide E-Mail Typen Ergebnis-Mail (resultmail) und Benutzer-Mail (receiptmail).
Code:
public function onVisformsBeforeEmailPrepare($context, $form): bool {
// context = 'com_visforms.form.resultmail'
// context = 'com_visforms.form.receiptmail'
// triggered in VisformsModel before the mail object is instantiated:
// can be used to modify the form object (i.e. to stop sending the mail or change addresses)
if($form->id == 2) {
$field = $this->getFieldByID($form, 84);
// german notation without thousands separator
$field->dbValue = number_format($field->dbValue, 2, ',', '') . ' €';
}
return true;
}
Beispiel: Aus 1000 wird dann 1000,00 € im Mail-Text.
In der Dokumentation wird beschrieben, wie ein 'Visforms Custom Plugin' erstellt werden kann:
docs.joomla-4.visforms.vi-solutions.de/d...-plugin-development/
docs.joomla-4.visforms.vi-solutions.de/d...-plugin-development/
Der Entwickler kann dann selbst entscheiden, was zusätzlich alles geschehen soll.
Die Erstellung eines Custom-Plugins erfordert etwas Erfahrung in der PHP-Entwicklung unter Joomla.
Falls du Hilfe bei der Entwicklung des Plugins benötigst, dann können wir dich gerne dabei unterstützen - auch mit der kompletten Implementierung.
Bitte habe Verständnis dafür, dass wir diesen Aufwand zu unserem aktuellen Stundensatz berechnen müssen.
Liebe Grüße, Ingmar