-
Notifications
You must be signed in to change notification settings - Fork 22
Description
Zusammenfassung
Unterstützung für ein notice Attribut, das Hilfetext direkt unterhalb von Eingabefeldern anzeigt, analog zum Bootstrap help-block Pattern.
Motivation
Aktuell unterstützt MForm info-tooltip (Icon mit Hover-Text neben dem Label). Es gibt jedoch keine integrierte Möglichkeit, dauerhaft sichtbaren Hilfetext direkt unter einem Eingabefeld anzuzeigen, was ein gängiges UX-Pattern für kontextuelle Hilfe ohne Benutzerinteraktion ist.
Anwendungsfälle:
- Erklärung des erwarteten Eingabeformats (z.B. "Format: TT.MM.JJJJ")
- Bereitstellung von Beispielen (z.B. "Beispiel: [email protected]")
- Verdeutlichung des Feldzwecks (z.B. "An diese Adresse werden die Formulardaten gesendet")
- Anzeige von Zeichenlimits oder Validierungshinweisen
Vorgeschlagene Implementierung
1. Property zu MFormItem hinzufügen (DTO/MFormItem.php)
public string $notice = "";
public function getNotice(): string
{
return $this->notice;
}
public function setNotice(string $notice): static
{
$this->notice = $notice;
return $this;
}2. Attribut in MFormAttributeHandler behandeln (Handler/MFormAttributeHandler.php)
switch ($name) {
// ... vorhandene Cases ...
case 'notice':
$item->setNotice($value);
break;
// ... vorhandene Cases ...
}3. Property zu MFormElement hinzufügen (DTO/MFormElement.php)
public string $notice = "";
public function setNotice(string $notice): static
{
$this->notice = $notice;
return $this;
}4. Notice an Template-Element übergeben in MFormParser (Parser/MFormParser.php)
In generateInputElement() und generateAreaElement():
$templateElement = new MFormElement();
$templateElement->setLabel($this->parseElement($this->createLabelElement($item), 'base'))
->setElement($this->parseElement($element, 'input')) // oder 'textarea'
->setNotice($item->getNotice())
->setType($this->getDefaultTemplateType($item, $templateElement));5. Notice im Fragment rendern (fragments/mform/mform_default.php)
$notice = $this->getVar('notice') ? '<p class="help-block small">' . $this->getVar('notice') . '</p>' : '';
$inputWrapperClose = ($this->getVar('notCloseInputWrapper')) ? '' : ($notice . '</div>');Verwendungsbeispiel
$mform = MForm::factory();
$mform->addTextField('email', [
'label' => 'E-Mail-Adresse',
'notice' => 'An diese Adresse wird eine Bestätigungsmail gesendet'
]);
$mform->addTextAreaField('message', [
'label' => 'Nachricht',
'notice' => 'Maximal 500 Zeichen',
'rows' => 5
]);Visuelles Beispiel
Aktuelles Verhalten (ohne notice, addDescription oder addHTML):
Label
[___________________]
Erwartetes Verhalten (mit notice):
Label
[___________________]
Hilfetext erscheint hier (klein, grau)
Ich habe diese Implementierung in meinem Projekt getestet und sie funktioniert einwandfrei mit Text-Inputs, Textareas und anderen Formularelementen. Gerne stelle ich einen PR bereit, wenn dieses Feature willkommen ist.