it-swarm.com.de

Wie erstelle ich ein wiederholbares XML-Formularfeld-Feature?

Ich baue eine benutzerdefinierte Komponente und alles ist gut. Ich dachte, ich würde die neue Funktion für wiederholbare xml-Formularfelder in Version 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 Speichern im Modal schließt das Modal und wendet den Speichervorgang 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

7
Jonnypixel

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

Erstens habe ich bei der Verwendung des Beispiel-Codeblocks in meiner benutzerdefinierten XML-Komponentendatei versäumt, den Feldnamen in meiner benutzerdefinierten Datenbanktabelle hinzuzufügen.

Also zum Beispiel: list_templates aus dem xml-Beispiel

Muss in die MYSQL-Datenbank in meiner Komponententabelle wie folgt 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 einen Fehler, bei dem beim Schließen und erneuten Öffnen von Modal 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 modale Box 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 einige 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 speichern und anwenden kann, nachdem ich auf die Speichern-Schaltfläche innerhalb des Modals geklickt habe.

Das bedeutet, wenn ich auf "Speichern" klicke, um die wiederholbaren Felder modal zu speichern, wird die Seite gespeichert und angewendet, sodass ich die Daten direkt aus dem Tabellenspaltenfeld erfassen und auf der Seite anzeigen kann.

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

Eine Funktion zum Abrufen von 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 ein varibale für Ansicht wie folgt einstellen

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

und dann nach der Linie 341

Ich habe das hinzugefügt

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

Jetzt macht der modale Save-Button seine Sache und dann speichert Joomla das Item 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 dies für möglich hält und versehentlich auf die Standardschaltflächengruppe des Elements klickt.

Ich hoffe ich kann jemandem mit meiner Antwort/Post weiterhelfen. Wenn es nicht angebracht ist, dies alles in mich aufzunehmen, lass es mich wissen und ich werde es an einen anderen Ort verlegen.

-

6
Jonnypixel