mform icon indicating copy to clipboard operation
mform copied to clipboard

Selected bei MultipleSelect funktioniert erst nach Reload

Open rlfschmd opened this issue 3 years ago • 28 comments

Beim Versuch, ein Modul mit MultipleSelect-Feld zu editieren, erscheint das Feld trotz korrekt vorhandener Daten leer, weil keine selected-Attribute gesetzt sind (sehr wohl aber ein korrektes data-selected). Dasselbe passiert, wenn man statt 'Speichern' 'Übernehmen' wählt: Das MultipleSelect erscheint komplett unselektiert.

In beiden Fällen führt ein Reload seltsamerweise dazu, dass die selected-Attribute gesetzt werden und das Feld demzufolge wieder ausgefüllt erscheint.

rlfschmd avatar Feb 08 '22 16:02 rlfschmd

Welche mform-Version? Ich kann das Problem nicht reproduzieren? Wie sieht Dein Eingabe-Code aus?

skerbis avatar Feb 08 '22 16:02 skerbis

mForm 6.1.2, Redaxo 5.12.1. Der Code:

$evt_articles = rex_category::get(2)->getArticles();
$evts = array();
foreach ($evt_articles as $a) :
	$evts[$a->getValue("id")] = strftime("%d.%m.%y", $a->getValue("start"))." · ".$a->getValue("name");
endforeach;
$mform->addHtml("<div id='events' class='dependent'>")
->addMultiSelectField(7)
->setOptions($evts)
->setLabel('Veranstaltungen*')
->addAttribute('class', 'selectize')
->addAttribute('size', '10')
->setSize('full')
->addDescription('Mehrfachauswahl, tippen Sie bei Bedarf ein paar Buchstaben ein, um die Liste einzugrenzen.')
->addHtml("</div>");

rlfschmd avatar Feb 08 '22 16:02 rlfschmd

Ich helfe mal nach ;)

$evts = array();
foreach ($evt_articles as $a) : $evts[$a->getValue("id")] = strftime("%d.%m.%y", $a->getValue("start")) . " · " . $a->getValue("name"); endforeach;
$mform->addHtml("<div id='events' class='dependent'>")
    ->addMultiSelectField(7)
    ->setOptions($evts)
    ->setLabel('Veranstaltungen*')
    ->addAttribute('class', 'selectpicker')
    ->addAttribute('class', 'selectize')
    ->addAttribute('size', '10')
    ->setSize('full')
    ->addDescription('Mehrfachauswahl, tippen Sie bei Bedarf ein paar Buchstaben ein, um die Liste einzugrenzen.')
    ->addHtml("</div>");

@rlfschmd https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax#quoting-code

eaCe avatar Feb 08 '22 16:02 eaCe

Danke ;) selectpicker und selectize sind doppelt gemoppelt, in der Realität ist selectpicker auskommentiert.

rlfschmd avatar Feb 08 '22 17:02 rlfschmd

Beim Test mit einem Dummy: $evts = array(1 => 'test1', 2 => 'test2', 3 => 'test3', 4 => 'test4',); funktioniert es wie erwartet. Allerdings ohne selectize

ascky-thorben avatar Feb 08 '22 17:02 ascky-thorben

@ascky-thorben Nein, bei mir leider nicht. Mit oder ohne selectize (ich hätte noch erwähnen sollen, dass das Problem auch mit einem nackigen Select auftritt). Das $evts array ist definitv korrekt, es wird alles gut gespeichert und nach dem Reload ist auch alles okay, aber das kann ja kaum beabsichtigt sein.

rlfschmd avatar Feb 08 '22 17:02 rlfschmd

Vor dem Reload:

vor_reload

Nach dem Reload:

nach_reload

rlfschmd avatar Feb 08 '22 17:02 rlfschmd

Stimmt, in einer anderen Installation kann ich es nachvollziehen. Sorry, ich habe hier aus versehen 2 Accounts aktiv... :|

eaCe avatar Feb 08 '22 17:02 eaCe

~~https://github.com/FriendsOfREDAXO/mform/blob/master/lib/MForm/Parser/MFormParser.php#L530 Der $itemValue sieht bei mir hier nicht korrekt aus und schlägt dann danach im Vergleich fehl if ($key == $iValue) {. Ich denke irgendwo wird ein JSON falsch gespeichert?~~

~~$iValue: "[&quot;1&quot;"~~ ~~$key: 4~~

~~Das passiert hier: https://github.com/FriendsOfREDAXO/mform/blob/master/lib/MForm/Utils/MFormItemManipulator.php#L34~~

Auf zwei weiteren Installationen passiert das Problem mit den gleichen Versionen nicht.

eaCe avatar Feb 08 '22 17:02 eaCe

@rlfschmd kann es sein das du die Form in mBlock verwendest? In diesem zusammenspiel lässt sich das Problem reproduzieren.

eaCe avatar Feb 08 '22 19:02 eaCe

@eaCe Nein, mBlock ist nicht installiert. Ich kenne das Addon nur vom Hörensagen und kann es als Ursache oder Mitwirkenden insofern ausschließen.

rlfschmd avatar Feb 08 '22 19:02 rlfschmd

@rlfschmd kannst du deinen Systembericht mal hier rein kopieren? Vielleicht ist es irgend ein anderes Addon. REDAXO -> System -> Systembericht

Ich kann das Problem nur in verbindung mit mBlock beobachten.

eaCe avatar Feb 08 '22 19:02 eaCe

@eaCe Ja, klar:

System report (REDAXO 5.12.1, PHP 7.4.26, MariaDB 10.5.11)
REDAXO
Version 5.12.1
PHP
Version 7.4.26
OPcache no
Xdebug no
Database
Version MariaDB 10.5.11
Character set utf8mb4
Server
OS Linux
SAPI fpm-fcgi
Webserver Apache
Request
Browser Firefox/96.0
Protocol HTTP/2.0
HTTPS yes
Packages
adminer 1.9.1
backup 2.7.1
be_style 2.12.1
be_style/redaxo 2.12.1
bloecks 3.1.0
bloecks/cutncopy 3.1.0
bloecks/dragndrop 3.1.0
consent_manager 3.0.0
developer 3.9.0
install 2.9.1
markitup 3.6.1
media_manager 2.11.1
mediapool 2.10.1
metainfo 2.8.1
mform 6.1.2
mform/docs 1.1
phpmailer 2.10.2
plyr 3.11.1
project dev
properties 1.2.2
search_it 6.7.3
search_it/documentation 6.7.3
structure 2.12.1
structure/content 2.12.0
structure_tweaks 1.3.2
ui_tools 1.0.0
ui_tools/bootstrap-datetimepicker 4.17.47
ui_tools/jquery-minicolors 2.2.7
ui_tools/selectize 0.2.0
users 2.8.0
watson 2.2.0
yform 3.4.2
yform/email 3.4.2
yform/manager 3.4.2
yrewrite 2.7
yrewrite_scheme 3.6.0

rlfschmd avatar Feb 08 '22 19:02 rlfschmd

@eaCe in welcher REDAXO Version hast du getestet?

skerbis avatar Feb 08 '22 20:02 skerbis

@skerbis ich habe 5.13.2 und 5.12.1.

Bisher, ohne mBlock immer erfolgreich. Der Output mit den Quotes passt, das ist mein Fehler gewesen.

Ralf schrieb in Slack auch das sein Input wie folgt aussieht: <select id="rv20_7" name="REX_INPUT_VALUE[7][]" class="form-control selectize" multiple="multiple" size="176" data-selected="343,341,253,327">

Bei mir dann <select id="rv3_7" name="REX_INPUT_VALUE[7][]" class="form-control selectize selectized" multiple="multiple" size="4" data-selected="[&quot;2&quot;,&quot;3&quot;]" tabindex="-1" style="display: none;">

Mit mBlock ist das Verhalten wie oben beschrieben.

eaCe avatar Feb 08 '22 20:02 eaCe

Was ist selectize?

skerbis avatar Feb 08 '22 20:02 skerbis

Kannte ich auch nicht, steckt in den ui_tools und macht sowas hier: grafik

eaCe avatar Feb 08 '22 20:02 eaCe

Passiert das auch ohne?

skerbis avatar Feb 08 '22 20:02 skerbis

Passiert das auch ohne?

cc @rlfschmd

eaCe avatar Feb 08 '22 20:02 eaCe

@skerbis Ja. Ich kann das ganze Fancy-Zeug weglassen und ein normales Plain-HTML-Multiselect ausgeben. Das Verhalten ist vollkommen identisch, es fehlen auch hier die selected-Attribute, die nach einem Reload dann plötzlich da sind.

rlfschmd avatar Feb 08 '22 20:02 rlfschmd

@skerbis @ascky-thorben Peinlich, peinlich, aber es war falscher Alarm. Im Modul wirkte noch eine Aktion, in der ich die empfangenen Werte ["1", "2", "n"] zu "1, 2, n" umwandelte (warum, weiß ich nicht mehr). Die Aktion hatte ich nicht mehr auf dem Zettel, und als ich sie irgendwann endlich wahrnahm, brauchte ich nur die Umwandlung rausnehmen und alles war gut. Sorry für den sinnlosen Auftrieb und herzlichen Dank für eure Hilfe!

rlfschmd avatar Feb 10 '22 15:02 rlfschmd

Na gut das du es gefunden hast ;) ich habe mir einen Wolf getestet :D Dennoch besteht das Problem wie du es beschrieben hast in mBlock, da werde ich mal ein Issue öffnen. Dann können wir hier ja schließen.

eaCe avatar Feb 10 '22 15:02 eaCe

@eaCe Ich habe eine relativ jungfräuliche Installlation mit Redaxo 5.13.2, mblock 3.1.0 und mform 6.1.2. Da funktionieren die MultiSelects wie sie sollen – es könnte also sein, dass noch was anderes im Spiel ist. Ich kann aber gerne testen helfen, wenn du ein Issue eröffnest.

rlfschmd avatar Feb 10 '22 15:02 rlfschmd

Hallo, habe unlängst bei einer Installation Redaxo 5.14.1 MForm auf Version 7 upgedatet und habe jetzt das beschriebene Problem. Bei "Block übernehmen" wird die Auswahl von Multiselects nicht dargestellt.

In Redaxo 5.14.1 mit MForm Version 6.x funktionierten die Multiselects definitiv.

Habe sowohl meine eigenen Module als auch den Demo Code von MForm getestet. MBlock ist installiert. Deaktivierung hat keine Änderung gebracht. Aktionen habe ich keine

fietstouring avatar Oct 22 '22 22:10 fietstouring

@skerbis Ja. Ich kann das ganze Fancy-Zeug weglassen und ein normales Plain-HTML-Multiselect ausgeben. Das Verhalten ist vollkommen identisch, es fehlen auch hier die selected-Attribute, die nach einem Reload dann plötzlich da sind.

passiert mit selectpicker und auch ohne (mit Klasse none-selectpicker)

fietstouring avatar Oct 22 '22 22:10 fietstouring

Beispiel Multiselect mit option values none-1, none-2: beim Öffnen des Moduls oder bei Reload: $items_selected ist {"1":["none-1","none-2"]}, bei Block übernehmen ist $items_selected null (function createOptionElement)

fietstouring avatar Oct 23 '22 09:10 fietstouring

Ich habe das beschriebene Problem mit der Multiauswahl auch gerade (ohne MBlock).

Im Artikel-Edit werden die gesetzten Multiauswahl-Werte im Block grundsätzlich gespeichert – auch bei "Übernehmen". Sie werden dann nach der "Aktualisiert"-Meldung aber in der noch offenen Editor-Ansicht entfernt, sodass erneutes Speichern nun eine leere Auswahl speichern würde. Wenn ich jetzt aber nur abbreche, sind die mit Übernehmen gespeicherten Werte beim nächsten Block-Edit wieder zu sehen.

REDAXO 5.14.1 MForm 7.2.2 PHP 8.0.25 MariaDB 10.5.17

MForm-Code im Modul-Input:

$mform1 = MForm::factory()
	->addFieldsetArea('Video', MForm::factory()
		->addDescription('Hier können Sie ein Video aus dem Medienpool einbinden.')
		->addMediaField(1, ['label'=>'Video', 'preview'=>'0', 'types'=>$mediatypes_vid])
		->addMultiSelectField(7, ['loop'=>'Endlosschleife', 'autoplay'=>'Automatisch abspielen', 'muted'=>'Ohne Sound'], ['label' => 'Optionen'])
	);

ischfr avatar Nov 03 '22 11:11 ischfr

Kleiner Nachtrag:

wenn ich so ein Multiselect in MBlock einsetze, habe ich das Problem nicht. Die Multiselects in den MBlock-Einträgen bleiben auch nach "Übernehmen" erhalten.

ischfr avatar Nov 16 '22 09:11 ischfr

Das lag daran, dass MForm die Felder nachträglich nach dem das MForm Formular gepasst wurde das HTML ausgewertet und selbstständig die Values gefüllt hat. Die 3 Ebenen wurden von MForm einfach nicht supported, das ist eine reine MBlock Vorgehensweise.

joachimdoerr avatar May 13 '24 20:05 joachimdoerr