mblock icon indicating copy to clipboard operation
mblock copied to clipboard

Alternative REX_VARs funktionieren nicht

Open tbaddade opened this issue 9 years ago • 15 comments

Bsp. REX_YFORM_TABLE_DATA[id=1 output="widget" table="yform_table" field="name"]

Wird zwar korrekt angezeigt, aber die Daten werden nicht richtig gespeichert bzw. gelesen.

tbaddade avatar Feb 07 '17 10:02 tbaddade

Gespeichert werden die Daten sicher, aber gelesen nicht da MBlock direkt aus dem Slice Datensatz die Values ausliest und in das Formular schreibt.

joachimdoerr avatar Feb 07 '17 20:02 joachimdoerr

Wie genau funktionieren diese Felder? Werden die speziell von YForm versorgt?

joachimdoerr avatar Feb 09 '17 15:02 joachimdoerr

Wie genau funktionieren diese Felder?

wie REX_LINK, REX_LINKLIST, REX_MEDIA, REX_MEDIALIST nur eben mit eigenen Params

Könntest ggf. auf REX_ matchen?

PS: Das obige Bsp. ist für die Moduleingabe gedacht.

tbaddade avatar Feb 09 '17 15:02 tbaddade

Wird das auch im Slice gespeichert? oder sonstwo?

Ein Modul Beispiel wäre super.

joachimdoerr avatar Feb 12 '17 13:02 joachimdoerr

Mit dem widget kann man die Wert von Haus aus nicht in ein rex_json speichern. Das Widget ist somit das Problem bei der ganzen Sache. Es erzeugt ein hidden Input-field welches den Wert als REX_INPUT_VALUE abspeichern, das macht das ganze etwas schwieriger.

joachimdoerr avatar Feb 27 '17 17:02 joachimdoerr

Inwiefern ist das Widget das Problem. Die REX_MEDIA / LINK Widgets verwenden doch auch hidden Felder.

Müsste man nicht nur REX_INPUT_VALUE anpassen sobald as ein REX_VAR. Also aus REX_INPUT_VALUE wird wie bei REX_LINK dann REX_INPUT_VALUE[4][0][REX_INPUT_YFORM_TABLE_DATA_1]

tbaddade avatar Feb 27 '17 17:02 tbaddade

Das stimmt doch die Link und Media Widgets wollen aus der DB Link oder Media Columns auslesen und schreiben dann nichts in den Value, das ist beim Tabellen Widget anders das schreibt den JSON-String in das Value was das HTML zerstört wegen der Anführungszeichen. Ich hab schon begonnen mit dem Umschreiben des Name-Attributes - läuft soweit aber eben beim nachträglichen Editieren gibts Probleme.

joachimdoerr avatar Feb 27 '17 19:02 joachimdoerr

@joachimdoerr Kannst du sagen, wann MBlock alternative Widgets unterstützen wird?

tbaddade avatar Dec 07 '17 04:12 tbaddade

Momentan hab ich keine Idee wie ich das umsetzen kann. Das Problem sind die Widgets welche den gesamten String in das Value schreiben. Da das ein kompletter JSON-String ist zerhaut es das HTML so hart, dass ich da nichts mehr machen kann.

joachimdoerr avatar Dec 07 '17 07:12 joachimdoerr

Das wird nur in Zusammenhang mit mform funktionieren können da die widgets an sich die den gesamten rex_value in das value des input Feldes schreien, das zerschießt dann das html und ich kann via DOMDocument nichts mehr manipulieren. Mit MForm könnte man die Widgets ähnlich wie die MediaButtons initialisieren und dieses verhalten unterdrücken.

joachimdoerr avatar Jun 01 '18 11:06 joachimdoerr

Das wird nur in Zusammenhang mit mform funktionieren können da die widgets an sich die den gesamten rex_value in das value des input Feldes schreien,

Ich fände es besser, wenn es komplett ohne MForm funktionieren könnte. Wenn die alternativen Widgets in eine eigene Column schreiben würden, dann wäre es einfacher?

tbaddade avatar Jun 01 '18 11:06 tbaddade

Ja es wäre wesentlich einfacher bzw. der einzige weg aus meiner Sicht.

joachimdoerr avatar Sep 11 '18 15:09 joachimdoerr

Problem scheint immer noch vorhanden zu sein, eine Lösung aber nicht in Sicht bzw. schwer umzusetzen. Daher schließe ich.

Wenn jemand @joachimdoerr hier unterstützen mag, gern wieder öffnen.

tbaddade avatar Apr 06 '20 19:04 tbaddade

Ich bin wieder an der Stelle, dass ich ein eigenes REX_VAR in MBLock nutzen möchte.

Das stimmt doch die Link und Media Widgets wollen aus der DB Link oder Media Columns auslesen und schreiben dann nichts in den Value, das ist beim Tabellen Widget anders das schreibt den JSON-String in das Value was das HTML zerstört wegen der Anführungszeichen.

Warum schreiben REX_LINK und REX_MEDIA nicht in die eigenen Felder? Das wird scheinbar auch unterbunden. Wo muss man ansetzen, damit eigene Values funktionieren? Vielleicht kannst du auch noch einmal das Problem genauer erläutern. Ich wäre sehr an eine Lösung für MBlock interessiert

tbaddade avatar Jul 31 '20 08:07 tbaddade

@tbaddade rex_link und rex_media können nicht in die eigenen vars notieren, das widerspricht dem Grundprinzip von MBlock.

RexVars:

  • Die Inhalte von vielen Blöcken werden als JSON in ein RexVar notiert.
  • Hier müssen alle Inhalte aller Form-Elemente in das JSON gepusht werden auch die Inhalt von rex_link und rex_media Widgets
  • Anhand des JSON erkennt MBlock dann was in die einzelnen Blöcke geparst werden muss.
  • Beim Editieren parst dann der PHP Part von MBlock das Form X mal anhand dieses JSON und beschreib die Values der Formular Elemente mit dem JSON Inhalt pro Block.
  • Während des Bearbeitens kümmert sich das JS darum, dass die Blöcke verschoben, entfernt, dupliziert oder neu angelegt werden können.

Das Problem mit YForm-Widgets:

  • Da RexLink, RexLinklist, RexMedia und RexMedialist ihre eigenen Vars beschreiben, wollen diese Widgets auch aus den "eigenen" Vars initial auslesen.
  • Das kommt MBlock nicht in die quere da dort jeweils simple Springs in die Form-Elemente geprinted wurden (vordem MBlock versucht irgendetwas zu manipulieren, diese Strings werden dann von MBlock übrschrieben).
  • Bei YForm-Widgets ist das etwas anders, diese lesen RexVars initial aus.
  • Sofern dann in diesen das gesamt JSON von MBlock notiert wurde kommt es zum HTML Desaster.
  • Da das Widget stumpf den RexVar Inhalte in das Form Element printed haben wir ein zerstörtes HTML.
  • MBlock versucht nachträglich das HTML via DOMDocument/DOMElement zu manipulieren doch da ist jetzt im HTML der gesamte JSON String mit allen " Anführungszeichen in das Value- und Name-Attribute vom YForm Widget HTML-Element geschrieben.
  • Das dadurch zerstörte HTML kann von MBlock nicht mehr als DOMDocument eingelesen und manipuliert werden.

Lösung:

  • Bester Weg wäre: Wenn das Widget den Inhalt aus seinem RexVar nicht auslesen täte, man müsste irgendwie beim initialisieren diese Mechanik via Parameter unterdrücken können.
  • Andere Lösung: Via string_replace den JSON-String aus dem HTML-Formular-String bevor dieses als DOMDocument eingelesen werden soll herausfiltern.

joachimdoerr avatar Aug 10 '20 07:08 joachimdoerr