Wie erstelle ich eine wiederholbare XML-Formularfeldfunktion?


7

Ich baue eine benutzerdefinierte Komponente und alles ist gut. Ich dachte, ich würde die neue Funktion für wiederholbare XML-Formularfelder 3.2 ausprobieren. Obwohl es funktioniert, weiß ich nicht genau, wie ich die Daten speichern soll.

Es ermöglicht mir, ein Modal zu starten und innerhalb dieses Modals bis zu 999 benutzerdefinierte Felder zu erstellen, die ich spezifiziere. Aber die grüne Schaltfläche zum Speichern im Modal schließt das Modal und wendet das Speichern nicht an?

Vermisse ich etwas

- -

<field name="list_templates"
    type="Repeatable"
    icon="list"
    description="Main description"
    label="Main Label"
    default="">
    <fields name="params">
    <fieldset hidden="true" name="list_templates_modal" repeat="true">
            <field name="template"
                    label="Template Label"
                    size="30"
                    type="text" />
            <field name="location"
                    label="Location Label"
                    description="desc"
                    size="30"
                    type="filelist"
                    directory="media/editors/tinymce/templates"
                    exclude="index.html"
                    hide_default="true"
                    hide_none="true" />
            <field name="description"
                    label="Description Label"
                    size="30"
                    type="textarea" />
    </fieldset>
    </fields>

Prost im Voraus

Jonny


Ich glaube, es gibt immer noch einen Fehler mit den sich wiederholenden Formularfeldern. Das Schließen und erneute Öffnen des Modals führt zu doppelten Einträgen. Möglicherweise haben Sie jedoch einen anderen Fehler gefunden. Könnte einen Blick wert sein
Lodder

@Lodder ok cool. Ich wünschte nur, sie hätten mehr Details zu den Dokumenten hinzugefügt. Ich kann anscheinend nichts mit mehr Details finden. Es ist fast so, als müssten Sie zusätzlichen Code in die MVC schreiben, damit es funktioniert.
Jonnypixel

@Lodder Können Sie eine andere Möglichkeit vorschlagen, wiederholbare Felder in meine Datei edit.php einzufügen?
Jonnypixel

Es gibt keinen anderen einfachen Weg, dies zu tun. Bitte geben Sie den aktuellen Code an, den Sie für die sich wiederholenden Formularfelder verwenden
Lodder

2
@Jonnypixel Können Sie die Lösung bitte als eigenständige Antwort veröffentlichen?
Valentin Despa

Antworten:


6

Ok, hier ist die Antwort auf meine eigene Frage und ein paar Beobachtungen und Korrekturen.

Erstens habe ich bei der Verwendung des Beispielcodeblocks in meiner benutzerdefinierten XML-Komponentendatei versäumt, den Feldnamen in meine benutzerdefinierte Datenbanktabelle einzufügen.

Also zum Beispiel: list_templates aus dem XML-Beispiel

Muss wie folgt in die MYSQL-Datenbank in meiner Komponententabelle gehen:

Spaltenname: list_templates Spaltentyp: TEXT

Grundsätzlich, weil seine JSON-Daten und es am besten in eine Spalte vom Typ TEXT passen.

Nächster...

Es gab den Fehler, dass beim Schließen des Modals und beim erneuten Öffnen der hinzugefügte Inhalt dupliziert wurde.

Um dies zu beheben, habe ich die Datei repeatable.js in media / system / js gefunden und eine Sicherungskopie davon erstellt. Ich habe dann die unkomprimierte Version in wiederholbare js eingefügt und festgestellt, dass durch Ändern dieser Zeile:

30 // Set original content for cancel            
31 origContent = getTrs().clone();

dazu

30 // Set original content for cancel            
31 origContent = getTrs();

Dass es tatsächlich den Duplizierungsfehler behebt. Ich habe mehrere Tests durchgeführt, um zu sehen, ob es das Richtige tut und es tatsächlich ist. Es tritt kein Datenverlust auf und es werden keine Daten mehr dupliziert. Sie können die Modalbox so oft öffnen und schließen, wie Sie möchten, und es werden immer nur die von Ihnen gespeicherten Auswahlen angezeigt.

Ich habe dies versucht, indem ich die Ansichtsdatei geschlossen und die Daten sowie mehrere andere Methoden wieder geöffnet habe, die alle funktionieren.

Und zuletzt!

Da ich den Inhalt des JSON in meiner Ansicht als Tabelle unter der Auswahlschaltfläche wiedergeben wollte, habe ich repetable / js einige Dinge hinzugefügt, damit ich nach dem Klicken auf die Schaltfläche Speichern im Modal speichern und anwenden kann.

Dies bedeutet, dass beim Klicken auf Speichern in den wiederholbaren Feldern modal die Seite gespeichert und angewendet wird, sodass ich die Daten direkt aus dem Tabellenspaltenfeld sammeln kann, um sie auf der Seite anzuzeigen.

Ich habe dies erreicht, indem ich die folgenden Dinge hinzugefügt habe.

Eine Funktion zum Abrufen der Ansicht view = componentnameview aus der URL

 // get the url values function

 function getUrlVars() {
    var vars = {};
    var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi,    
    function(m,key,value) {
      vars[key] = value;
    });
    return vars;
  }

und dann eine Varibale für die Ansicht wie folgt einstellen

var componentName = getUrlVars()["view"]; 

und dann nach Zeile 341

Ich habe das hinzugefügt

Joomla.submitbutton(''+componentName+'.apply'); 

Jetzt macht die modale Schaltfläche Speichern ihre Sache und dann speichert Joomla das Element und weiß, in welcher Komponentenansicht es gespeichert wird und bleibt auf der Seite. Auf diese Weise kann ich die Tabellendaten erfassen, aber auch den Inhalt in den wiederholbaren Feldern modal speichern, falls der Benutzer glaubt, sie gespeichert zu haben, und versehentlich auf die Standardschaltflächengruppe des Elements klicken.

Ich hoffe, ich kann jemandem mit meiner Antwort / Post helfen. Wenn es nicht angebracht ist, all dies einzubringen, lass es mich wissen und ich werde es woanders hin verschieben.

- -


Gute Arbeit! Wenn du kannst, solltest du eine PR mit deinen Änderungen am Staging-Repo machen. Die von Ihnen implementierte Funktionalität scheint eine willkommene Ergänzung zu sein.
Mathew Lenning

@MathewLenning danke. Ja, aber wo fange ich an? Ich bin mir nicht mal sicher, wohin ich gehen soll, um solche Dinge einzureichen. Die Joomla-Foren und -Repositories scheinen überall etwas zu sein. Wenn Sie mich verlinken oder an den richtigen Ort
weiterleiten können,

Es erfordert ein wenig Arbeit, um mit dem Beitragen zu beginnen, aber sobald Sie den Dreh raus haben, macht es viel Spaß (geeky programmer type fun = ^ P). Hier ist ein Tutorial, das Ihnen den Einstieg erleichtern soll. docs.joomla.org/Git_for_Coders
Mathew

gut gemacht! Wie überschreibt man die ursprüngliche repeatable.js? Wie Sie wissen, ist es keine gute Praxis, das Original zu hacken.
Reza Baradaran
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.