Selected bei MultipleSelect funktioniert erst nach Reload
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.
Welche mform-Version? Ich kann das Problem nicht reproduzieren? Wie sieht Dein Eingabe-Code aus?
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>");
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
Danke ;) selectpicker und selectize sind doppelt gemoppelt, in der Realität ist selectpicker auskommentiert.
Beim Test mit einem Dummy: $evts = array(1 => 'test1', 2 => 'test2', 3 => 'test3', 4 => 'test4',); funktioniert es wie erwartet.
Allerdings ohne selectize
@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.
Vor dem Reload:

Nach dem Reload:

Stimmt, in einer anderen Installation kann ich es nachvollziehen. Sorry, ich habe hier aus versehen 2 Accounts aktiv... :|
~~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: "["1""~~
~~$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.
@rlfschmd kann es sein das du die Form in mBlock verwendest? In diesem zusammenspiel lässt sich das Problem reproduzieren.
@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 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 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 |
@eaCe in welcher REDAXO Version hast du getestet?
@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="["2","3"]" tabindex="-1" style="display: none;">
Mit mBlock ist das Verhalten wie oben beschrieben.
Was ist selectize?
Kannte ich auch nicht, steckt in den ui_tools und macht sowas hier:

Passiert das auch ohne?
Passiert das auch ohne?
cc @rlfschmd
@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.
@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!
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 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.
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
@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)
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)
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'])
);
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.
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.