FriendsOfREDAXO / mblock

Beliebig viele Datenblöcke innerhalb eines Moduls, per Drag & Drop verschiebbar.
MIT License
81 stars 10 forks source link

Media Feld mit json id funktioniert nicht #150

Open PatrickG opened 2 years ago

PatrickG commented 2 years ago

Hi,

ich habe ein Problem mit den Buttons welche das Medien-Window öffnen wenn ich eine "json id ('2.0.image' statt '2')" nutze. Anscheinend wird die onEnd funktion in https://github.com/FriendsOfREDAXO/mblock/blob/master/assets/mblock.js#L105 nicht ausgeführt, was wiederum dazu führt das die mblock_reindex funktion nicht ausgeführt wird. Dadurch bekomme ich im Medien-Window die Fehlermeldung Media input field not found, weil die URL des Windows &opener_input_field=REX_MEDIA_204822787906 ist, obwohl die ID des inputs REX_MEDIA_11000 ist

HTML des Formulars:

<div class="input-group">
  <input class="form-control" id="REX_MEDIA_11000" name="REX_INPUT_VALUE[2][0][image]" readonly="" type="text" value="">
  <span class="input-group-btn">
    <a class="btn btn-popup" href="#" onclick="openREXMedia('2042188471', '');return false;" title="Medium auswählen"><i class="rex-icon rex-icon-open-mediapool"></i></a>
    <a class="btn btn-popup" href="#" onclick="addREXMedia('2042188471', '');return false;" title="Neues Medium hinzufügen"><i class="rex-icon rex-icon-add-media"></i></a>
    <a class="btn btn-popup" href="#" onclick="deleteREXMedia('2042188471');return false;" title="Ausgewähltes Medium löschen"><i class="rex-icon rex-icon-delete-media"></i></a>
    <a class="btn btn-popup" href="#" onclick="viewREXMedia('2042188471', '');return false;" title="Ausgewähltes Medium anzeigen"><i class="rex-icon rex-icon-view-media"></i></a>
  </span>
</div>

Module input:

echo MBlock::show(
    '2',
    MForm::factory()
        ->addFieldsetArea(
            'Slide',
            MForm::factory()->addMediaField('2.0.image', ['label' => 'Bild'])
        ),
    ['min' => 1]
)

Wenn man einen weiteren Block mit dem +-Button hiinzufügt, klappt es. Wenn man '2' statt '2.0.image' als ID nutzt, klappt es auch.

DanielWeitenauer commented 2 years ago

Das ist ein bekanntes Problem und liegt daran, dass REDAXO die Array-Struktur nur für REX_VALUE vorsieht. Die Media-Widgets können diese Schreibweise nicht verarbeiten. Daher kann hier nur ein Integer als ID angegeben werden, den MBlock dann über Workarounds intern umformt. Irgendwann wurden auch mal andere Werte verarbeitet, das war jedoch nie offiziell vorgesehen und ist inzwischen nicht mehr möglich.

PatrickG commented 2 years ago

Danke für deine Antwort. Das habe ich inzwischen auch durch ein anderes issue herausgefunden. Aber vom Ding her funktioniert es ja. Also wenn man einen neuen Block mit dem +-Button erstellt funktioniert es, und wird auch korrekt gespeichert. Also vielleicht kann man es "fixen", bzw supporten. Fände es schöner mit $array['image'] auf die Daten zuzugreifen, als $array['REX_MEDIA_1'] 😅

DanielWeitenauer commented 2 years ago

Das wäre dann wahrscheinlich eher ein Feature für den Core. Ich kopiere die Daten am Anfang eines Moduls einfach stets in ein Medienobjekt und platziere es im gewünschten Key: $array['image'] = rex_media::get($array['REX_MEDIA_1']). Danach arbeite ich dann einfach damit weiter.