FriendsOfREDAXO / mform

Spielend einfach umfangreiche Modul-Input-Formulare erzeugen.
MIT License
77 stars 19 forks source link

mForm 8 addLinkField im Repeater speichert keinen Wert #351

Closed shauste closed 4 months ago

shauste commented 4 months ago

Description / Beschreibung Beim Editieren des Blocks: Ein ausgefülltes Linkfeld in einem Repeater-Element ist nach dem Speichern wieder leer.

<?php

use FriendsOfRedaxo\MForm;

$moduleForm = MForm::factory();

$valueId = 4;

$moduleForm
    ->addTabElement('Inhalt', MForm::factory()
        ->addFieldsetArea('Intro',
            MForm::factory()
                ->addTextField(1)
                    ->setLabel('Headline')
                ->addTextAreaField(2)
                    ->setLabel('Inhalt')
                    ->setAttribute('class', "redactorEditor2-format-image"))
        ->addFieldsetArea('Spalte Highlight',
            MForm::factory()
                ->addRepeaterElement($valueId,
                    MForm::factory()
                        ->addFieldsetArea('Texte',
                            MForm::factory()
                                ->addTextField("headline")
                                    ->setLabel('Headline')
                                ->addTextAreaField("content")
                                    ->setLabel('Inhalt')
                                    //->setAttribute('class', "redactorEditor2-format-image")
                        )
                        ->addFieldsetArea('Abbildung',
                            MForm::factory()
                                ->addMediaField("REX_MEDIA_1")
                                    ->setLabel('Bild')
                        )
                        ->addFieldsetArea('Link',
                            MForm::factory()
                                ->addTextField("linkTitle")
                                    ->setLabel('Beschriftung')
                                ->addLinkField("REX_LINK_1")
                                    ->setLabel('Intern')
                                ->addTextField('linkExtern')
                                    ->setLabel('Extern')
                        ),
                    true, true, ['min' => 1, 'max' => 8])
                ), true
        );

echo $moduleForm->show();

Affected versions / Verwendete Versionen mForm 8.0.3 Redaxo 5.17.1 PHP 8.1.13

shauste commented 4 months ago

Wird ein abweichender Name verwendet, funktioniert das Speichern im Repeater, bspw:

->addLinkField("linkTarget")
joachimdoerr commented 4 months ago

Das Problem sollte mit folgendem Commit behoben sein: eface8b4b23182c7251c8e8a0f8311fa1b6d25e7 @shauste bitte mit der aktuellen Master testen. Und am besten auch gleich mit nested-Repeater testen:

<?php

use FriendsOfRedaxo\MForm;

echo MForm::factory(true)->addRepeaterElement(4,
    MForm::factory()
        ->addFieldsetArea('Abbildung',
            MForm::factory()
                ->addMediaField("REX_MEDIA_1")
                ->setLabel('Bild')
        )
        ->addFieldsetArea('Link',
            MForm::factory()
                ->addLinkField("REX_LINK_1")
                ->setLabel('Intern')
        )
        ->addRepeaterElement('links',
            MForm::factory()
                ->addFieldsetArea('Link',
                    MForm::factory()
                        ->addLinkField("REX_LINK_1")
                        ->setLabel('Intern')
                ),
            true, false)
    ,
    true, true, ['min' => 1, 'max' => 8])->show();
shauste commented 4 months ago

@joachimdoerr Habe ich getestet. Funktioniert im normalen Repeater wie erwartet.

Szenario „nested repeater“:

Hier wird der 1. Wert im nested repeater auch in den parent repeater eingefügt -> allerdings nur visuell, der Wert wird korrekt (abweichend was man sieht) gespeichert.

image
joachimdoerr commented 4 months ago

@shauste das tönt für mich als würde auch hier das JS nicht aktuell sein. Ich hab das ganze jedenfalls nochmals durchgetestet und konnte keinen Fehler feststellen.

skerbis commented 4 months ago

getestet, kann den Fehler nicht reproduzieren