Skip to content

Unterstützung für notice Attribut in Formularfeldern #389

@thorol

Description

@thorol

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions