it-swarm-eu.dev

Come creare una funzione di campo modulo XML ripetibile?

Sto costruendo un componente personalizzato e tutto va bene. Ho pensato di provare la nuova funzione di campo del modulo XML ripetibile 3.2. Sebbene funzioni correttamente, non so come salvare i dati.

Mi permette di lanciare un modale e all'interno di quel modale creare fino a 999 campi personalizzati che specifico. Ma il pulsante verde di salvataggio nel modale chiude il modale e non applica effettivamente il salvataggio?

Mi sto perdendo qualcosa?

-

<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>

Saluti in anticipo

Jonny

7
Jonnypixel

Ok, ecco la risposta alla mia domanda e un paio di osservazioni e correzioni.

Innanzitutto, quando ho usato il blocco di codice di esempio nel mio file componente XML personalizzato, ho trascurato di aggiungere il nome del campo nella mia tabella di database personalizzata.

Quindi, per esempio: list_templates dall'esempio xml

Deve andare nel database MYSQL nella mia tabella dei componenti in questo modo:

nome colonna: list_templates tipo colonna: TEXT

Fondamentalmente perché i suoi dati JSON e si adatta meglio all'interno di una colonna di tipo TEXT.

Il prossimo...

Si è verificato un errore a causa del quale, chiudendo Modal e riaprendolo, avrebbe duplicato il contenuto aggiunto.

Per risolvere questo problema, ho trovato il file repeatable.js che si trova all'interno di media/system/js e ne ho fatto una copia di backup. Ho quindi incollato la versione incompleta in js ripetibili e ho scoperto che cambiando questa riga:

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

a questa

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

Che risolve effettivamente il bug di duplicazione. Ho fatto diversi test per vedere se sta facendo la cosa giusta e in realtà lo è. Non si verifica alcuna perdita di dati e nessun dato viene più duplicato. Puoi aprire e chiudere la casella modale tutte le volte che vuoi e ti mostrerà solo le selezioni salvate.

Ho provato questo chiudendo il file di visualizzazione e riaprendo anche i dati e molti altri metodi che funzionano tutti.

E infine!

Poiché volevo fare eco al contenuto di JSON nella mia vista come una tabella sotto il pulsante di selezione, ho anche aggiunto un paio di cose a ripetibile/js per consentirmi di essere in grado di salvare e applicare dopo aver fatto clic sul pulsante di salvataggio all'interno del modale.

Ciò significa che quando faccio clic su Salva su campi ripetibili trghe modali la pagina si salva e si applica permettendomi di raccogliere i dati direttamente dal campo della colonna della tabella per visualizzarli sulla pagina.

Ho raggiunto questo aggiungendo le seguenti due cose.

Una funzione per ottenere view = componentnameview dall'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;
  }

e quindi impostare un varibale per la visualizzazione in questo modo

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

e poi dopo la linea 341

Ho aggiunto questo

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

Ora il pulsante modale Salva fa la sua cosa e poi joomla salva l'elemento e conosce in quale componente visualizza il suo salvataggio e rimane sulla pagina. Questo mi permette di raccogliere i dati della tabella ma salva anche il contenuto all'interno dei campi ripetibili modali nel caso in cui l'utente pensasse di salvarlo e ha accidentalmente fatto clic vicino sul gruppo di pulsanti predefinito dell'elemento.

Spero di poter aiutare qualcuno con la mia risposta/post. Se non è appropriato inserire tutto questo, fammelo sapere e lo sposterò altrove.

-

6
Jonnypixel