FriendsOfREDAXO / FriendsOfREDAXO/mform

Builder-Palette-Registrierung für Custom-Feldtypen (FieldTypeRegistry)

Open
#458 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
PHP
Stars
84
Forks
22
Avg merge
4h 9m
Merged PRs (30d)
5

Description

## Kontext

MForm 10.0 bietet mit `MForm::registerFieldType()` / `FieldTypeInterface` eine saubere Erweiterungs-API für Fremd-Addons, um eigene Feldtypen zu registrieren (siehe [API-Referenz](https://github.com/FriendsOfREDAXO/mform/blob/main/docs/13_api_reference.md#eigene-feldtypen-registry-ab-100), Roadmap nennt `relation_select`, `linkmap`, `mediaplace` als vorgesehene erste Nutzer).

Ich habe das gerade für das [a11y_datetime_addon](https://github.com/FriendsOfREDAXO/a11y_datetime_addon) umgesetzt (`MFormFieldType` implementiert `FieldTypeInterface`, registriert in dessen `boot.php`). Funktioniert einwandfrei über `addCustomField('a11y_datetime', ...)` — sowohl im klassischen Formular als auch im Flex-Repeater.

## Problem

Der visuelle Formbuilder (`pages/formbuilder.php`) hat eine **fest verdrahtete** Palette-Liste (`

    ` mit statischen `
  • `-Einträgen). Es gibt keine Möglichkeit, über `FieldTypeRegistry` registrierte Fremd-Feldtypen dort erscheinen zu lassen — sie sind nur programmatisch über `addCustomField()` im Modul-Code nutzbar, tauchen aber nicht als Drag&Drop-Baustein im Builder auf.

    ## Vorschlag

    `FieldTypeRegistry::register()` (bzw. eine neue begleitende Methode) könnte optional Palette-Metadaten entgegennehmen, z. B.:

    ```php
    MForm::registerFieldType('a11y_datetime', A11yDatetimeFieldType::class, [
    'label' => 'a11y_datetime Picker',
    'icon' => 'fa-calendar', // optional, Fallback-Icon falls keins angegeben
    'group' => 'community', // z.B. eigene Palette-Sektion "Community-Feldtypen" statt in die feste Liste zu mischen
    ]);
    ```

    `formbuilder.php` würde dann zusätzlich zur statischen Liste eine dynamische Sektion rendern (z. B. `FieldTypeRegistry::paletteEntries()`), die alle registrierten Typen mit Palette-Metadaten auflistet — ähnlich der bereits vorhandenen Gruppierung "Felder" / "Wrapper".

    Rückwärtskompatibel: Feldtypen, die weiterhin ohne Palette-Metadaten registrieren, funktionieren wie bisher rein programmatisch, erscheinen nur nicht im Builder.

    ## Warum das lohnt

    Ohne das bleibt die Registry-API für Fremd-Addons ein reiner Code-only-Weg — Redakteure, die Module über den Formbuilder statt per Hand-PHP bauen, können registrierte Custom-Feldtypen gar nicht nutzen, was einen Großteil des Komfortgewinns der neuen API wieder aufhebt.

    Gerne bereit, das auch selbst als PR umzusetzen, falls das Design so grob passt.

Contributor guide

No contributing guide indexed for this repository

Research direction

Start with pages/formbuilder.php and the FieldTypeRegistry registration API described in docs/13_api_reference.md. Define how optional palette metadata is stored and how registered entries are rendered alongside the existing static palette, while keeping registrations without metadata unchanged. Done means a registered custom field type appears as a usable builder item and remains available through addCustomField().

Written by the indexing model from the issue text.

Assessment

Tech stack
php
Domain
backend
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
68/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.