Repository navigation
9.0.0-beta2
🚨🚨ACHTUNG BETA. :: NICHT AUF PRODUKTIV-SYSTEMEN VERWENDEN
Version 9.0.0-beta2
Migration
- Bestehende MBlock-Module mit
addMediaField()/addLinkField()benötigenMForm::useCustomLinkForClassicWidgets(true)vor demMForm::factory()-Aufruf, um Reindex-Probleme beim Klonen von Blöcken zu vermeiden – in einem Modul-Input reicht der einmalige Aufruf; das Zurücksetzen auffalseist nur nötig, wenn im selben Request weitere MForm-Instanzen ohne das Flag folgen (z. B. inboot.phpoder Addon-Seiten) - Repeater-Ausgabe:
MFormRepeaterHelper::decode()ist bei Verwendung des Online/Offline-Toggles (__disabled) erforderlich; für einfache Repeater ohne Toggle bleibtjson_decode()ausreichend - Namespace-Änderungen: keine neuen Breaking Changes gegenüber v8 (Namespace
FriendsOfRedaxo\MFormbleibt) - Siehe 08_mblock_migration.md für den Migrationsleitfaden
Neu
MFormOutputHelper::createLinkData()/normalizeLinkData()– Unified Link-API als einheitlicher Einstieg für alle Link-Typen- Akzeptiert alle Eingabeformen: einfachen String (
redaxo://,https://,mailto:,tel:), Array mitid/name(Repeater-Format aus Issue #357), bereits vorbereitetescustomlink_*-Array - Parameter
mode(frontend|raw|strict): steuert ob Backend-Labels (namemit ID-Suffix) erhalten bleiben oder bereinigt werden - Optionaler Parameter
extern_blank(bool) fürtarget="_blank"bei externen Links
- Akzeptiert alle Eingabeformen: einfachen String (
MFormOutputHelper::normalizeRepeaterItems()– normalisiert Link-Felder in einem kompletten Repeater-Array in einem Schritt- Standard: fügt normalisiertes Array als
<feldname>_normalizedhinzu (kein Datenverlust) - Option
replace => trueüberschreibt das Original-Feld
- Standard: fügt normalisiertes Array als
MForm::useCustomLinkForClassicWidgets(true)– rendertaddMediaField()undaddLinkField()intern über dascustom_link-Widget- Kein Änderung am Speicherformat (
REX_MEDIA_n/REX_LINK_nbleiben identisch) - Standard
falsefür vollständige Rückwärtskompatibilität
- Kein Änderung am Speicherformat (
addCustomLinkMultipleField()– mehrere Custom-Links in einem Feld (Repeater-basiert), Single-Format bleibt unverändertaddConditionalFieldsetArea()– regelbasierte Anzeige von FormularbereichenaddFlexRepeaterElement()– neuer Flex-Repeater als Standardpfad, inkl. stabiler Initialisierung in dynamischen Backend-Kontexten- Kopieren / Einfügen für Flex-Repeater –
copy_paste => trueamaddRepeaterElement()- Copy-Button pro Item speichert Daten im
sessionStorage - Einfügen-Button fügt das kopierte Item als neues Element am Ende ein
- Clipboard bleibt nach Seitenreload erhalten;
__disabled-Status wird nicht übernommen
- Copy-Button pro Item speichert Daten im
MFormRepeaterHelper::decode()– bequemes Dekodieren von Repeater-Werten inkl. Filterung deaktivierter ItemsMFormRepeaterHelper::filterByField()– Items nach Feldwert filtern (optionaler strikter Vergleich)MFormRepeaterHelper::sortByField()– Items nach Feldwert sortieren (asc/desc, auto numerisch/alphabetisch)MFormRepeaterHelper::groupByField()– Items nach Feldwert gruppierenMFormRepeaterHelper::limitItems()– Items begrenzen / Pagination-Unterstützung- Template-API:
MForm::registerTemplate($key, $class),MForm::fromTemplate($key),->applyTemplate($key)über interne Registry (projektweite Defaults wiederverwendbar) - YForm Value-Type
custom_link_multi– mehrere Custom-Links in einem YForm-Feld (JSON-Array) addMFormMediaField()– MForm-natives Media-Widget ohne Reindex-Problem beim Klonen in MBlock- Dokumentationsseite „Was ist neu in MForm 9?" als Einstiegsseite in den Backend-Docs
Erweitert
- Repeater-UI: Aktiv/Inaktiv-Status pro Item (Auge-Icon), Ausgabe-Filter für deaktivierte Items, verbesserte Toggle-All-Logik
- Repeater-Header: Statusanzeige als gefüllter Punkt (grün = aktiv, rot = offline)
- Repeater-Symbole und Bedienung vereinheitlicht (konsistentes Auf-/Zuklappen inkl. verschachtelter Repeater)
- Linklist/Medialist-Repeater-Widget: robuste Übernahme aus Linkmap/Mediapool-Popups
- Medialist-Widget: View-Switch zwischen Listen- und Rasteransicht (
view,view_switch) - Medialist-Widget: Toggle wieder als Symbol-Button in der Toolbar
- Medialist-Widget: echte Datei-Previews analog zur
imagelist imagelistauf das neue List-Widget-Muster umgestellt (schlanker Wrapper ummedialist)- Neue Demo-Module ergänzt (Conditional Fields Builder, erweiterte Repeater-Szenarien)
- Dokumentation erweitert: Repeater, Output-Filter, Conditional Fields, neue Einstiegsseite
- Navigations- und Titelkonsistenz im Backend verbessert
- Bestehende Helper
prepareCustomLink(),getCustomUrl(),getCustomLinkUrl()bleiben unverändert, werden intern auf die neue Normalisierung geroutet
Fixed
- TinyMCE-Kompatibilität: stabileres Save/Destroy/Reinit bei Add/Move/Sort/Remove im Repeater
- Medialist-Widget: Preview-URLs korrekt aufbereitet (HTML-Entity-Decode für
rex_medialistbutton_preview) - YForm Value-Type
custom_link: Bug im Classic-Template (extern→external) behoben; Anker-Button überanchor: 0ausblendbar - Verhindert Reindex-Probleme in MBlock beim Klonen von Blöcken (via
useCustomLinkForClassicWidgets)