JSON für Repeatable-Feld nicht in getItem erstellen, sondern lediglich für die View aufbereiten

  • Hallo zusammen,


    meine Komponente wird immer umfangreicher und sollte langsam aber sicher auch noch einmal durchs Refactoring, um das "Geschmäckle" los zu werden.


    Eines meiner größten Probleme ist die Art und Weise, wie Joomla Werte für die Repeatable-Form speichert - in vielen Fällen lade ich die Werte nämlich aus einer anderen Tabelle und überführe die so gewonnenen Werte in der getItem-Methode in ein für Joomla verwendbares JSON.


    Kurz gesagt: getItem() sagt


    Code
    $item->repeatablefield = $this->getRepeatableField($item->id);


    getRepeatableField holt dann die Daten aus der Tabelle und überführt sie in ein JSON nach dem Muster:


    Code
    {"type":["test1", "test2"],"value":["test", "test"]}


    Im Grunde bildet das JSON ja die jeweiligen Werte spaltenweise ab. Um damit nun außerhalb der View zu arbeiten wandle ich dieses JSON dann in ein Array um, "kippe" dieses um und kann dann zeilenweise damit arbeiten. Ist zwar möglich, aber nicht immer elegant.



    Nun wäre mein Ziel, jedem Objekt, das aus getItem gewonnen wird und ein Repeatable-Field beinhaltet, die Werte für das Repeatable-Feld als assoziatives Array zur Verfügung zu stellen. Das Problem wäre allerdings, dass in der View dann das Repeatable-Feld nicht mehr anständig mit Werten gefüllt werden würde.


    Meine Frage lautet daher: Ist es möglich, Daten in getItem als assoziatives Array anzuhängen und dennoch den für Joomla verwertbaren JSON-String in die View zu bekommen?


    Ich hoffe mein Anliegen ist einigermaßen deutlich geworden, ansonsten unterfüttere ich das auch noch einmal mit Daten und etwas mehr Quelltext.


    Besten Dank und einen schönen Start in die Woche!

    • Hilfreich

    Hallo, das Refactoring ist ja ein Lieblingsthema von mir :) aber bevor du dich jetzt in Repeatable fields Zeit verlierst:
    Diese Fields waren von Anfang an nicht besonders gut zu handhaben - und dein Vorhaben artet unweigerlich in ein Gefrickel aus. Das habe ich auch bei mir - und es ist nicht elegant, wie du sagst. Aber es geht nicht anders.

    Aber: Ab 3.6. sind Repeatable fields deprecated und werden durch subforms ersetzt.
    Vielleicht beschäftigst du dich gleich mit der neuen Lösung? https://github.com/joomla/joomla-cms/pull/7829

  • Uh, das wird unweigerlich auch in viel Arbeit ausarten, ich habe eine ganze Menge Repeatable-Fields - aber gut - schauen wir mal.


    Ich danke Dir erst einmal für Deine Rückmeldung und werde mir das Subform-Field anschauen.

  • Klar etwas Arbeit, aber lohnt sich. Auch schon jetzt.


    Ich hatte nur wenige Repeatable und habs dann bleiben lassen, weil sich das jedes mal wieder als so kompliziert "nachts um 3h" rausstellte. Nach Erscheinen des Subform-PRs in 2015 erst mal genervt vom "schon wieder deprecated" 1 Plugin mit sehr aufwendigem Repeatable (Aufarbeitung und Speicherung) auf Subform umgestellt (halt als Eigenes/Custom Formularfeld mit eigenem JLayoutpfad).


    Bumsdiwums hatte Subform einen Riesenfan. Sparte so viele Zeilen kunst-nerdigen Um-die-Ecke-Code und dämliche Hilfsmethoden (für ähnlich deinem oben beschriebenen Problem) und Hirnschmalz. Macht die einzelnen XML-Dateien viel übersichtlicher, andere XML-Dateien wiederverwendbar (formsource). Die Integration von frei definierbaren JLayouts...


    Hach, ich muss schon wieder weinen... (luftwedel)

  • Hallo @Re:Later,


    das klingt ja schon mal gut - ich bin gespannt, ob ich das mit der Einführung von Joomla 3.6 dann sauber integriert bekomme :-).


    Vielen Dank erst einmal!