-
Notifications
You must be signed in to change notification settings - Fork 17
Description
An die Addon-Leads: ich habe da mal ´ne Verständnisfrage
An mehreren Stellen wird ein "Fake-Feld" in BE-Formularen ausgegeben. Das Feld soll wohl wie ein Formularfeld aussehen, aber nur nachrichtlich sein, keine Änderungsmöglichkeit. Das HTML wird innerhalb des PHP-Codes der Klasse RexFormSupport mit den Methoden getFakeText, getFakeTextarea bzw. getFakeCheckbox generiert.
consent_manager/lib/RexFormSupport.php
Lines 24 to 31 in a50a123
| public static function getFakeText(string $label, string $value): string | |
| { | |
| $html = ''; | |
| $html .= '<dl class="rex-form-group form-group consent_manager-fake">'; | |
| $html .= '<dt><label class="control-label">' . $label . '</label></dt>'; | |
| $html .= '<dd><input disabled class="form-control" type="text" value="' . $value . '"></dd>'; | |
| $html .= '</dl>'; | |
| return $html; |
Der Feldwert landet nicht in der Formularrückgabe, weil das name-Attribut fehlt. Deshalb wird tw. auch noch ein Hidden-Feld angehängt, aber nicht in jedem Fall.
consent_manager/pages/text.php
Lines 26 to 27 in a50a123
| $form->addRawField(RexFormSupport::getFakeText(rex_i18n::msg('consent_manager_uid'), (string) $form->getSql()->getValue('uid'))); | |
| $form->addHiddenField('uid', $form->getSql()->getValue('uid')); |
Weil es gute Praxis ist und auch in Redaxo so gemacht wird oder werden sollte, möchte ich die Hilfsmethoden getFakeText, getFakeTextarea und getFakeCheckbox gerne umbauen oder überflüssig machen.
Dafür sehe ich zwei Varianten:
- Einfach die normalen RexForm-Feldtypen benutzen und auf 'disabled' setzen (per Attribut)
- Fragmente schaffen und die drei Methoden den Code darüber aufbauen lassen.
Im ersten Fall würde der Input wieder ein name-Attribut bekommen und immer auch in der Rückgabe landen. Er könnte aber nicht verändert werden. Falls es für die abweichende Formatierung noch einen Identifier benötigt, kann man dazu ein Attribut eintragen und per CSS auswerten. Beispiel:
$field = $form->addTextField('uid');
$field->setLabel(rex_i18n::msg('consent_manager_uid'));
$field->setValue((string) $form->getSql()->getValue('uid'));
$field->setAttribute('disabled', ''); // keine Eingabe möglich
$field->setAttribute('fake', ''); // Marker für spezielles CSSdl:has(input[fake]) {
opacity: .6;
}
dl:has(input[fake]) label {
cursor: default;
} Und nun zu meiner Frage: Wurde es so gelöst, weil es anders keine gezielte Formatierung gab (:has(...) kam erst später) und man so auf DL-Ebene am einfachsten eine Klasse zur Formatierung setzen konnte? Votiert ihr eher zu Lösung 1 oder Lösung 2