it-swarm-es.tech

¿Cómo crear una función de campo de formulario xml repetible?

Estoy construyendo un componente personalizado y todo está bien. Pensé en probar la nueva función de campo de formulario xml repetible 3.2. Aunque lo tengo funcionando, no sé cómo guardar los datos.

Me permite iniciar un modal y dentro de ese modal crear hasta 999 campos personalizados que especifique. ¿Pero el botón verde de guardar en el modal cierra el modal y en realidad no aplica el guardar?

¿Me estoy perdiendo de algo?

-

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

Saludos de antemano

Jonny

7
Jonnypixel

Ok, aquí está la respuesta a mi propia pregunta y un par de observaciones y soluciones.

En primer lugar, cuando utilicé el bloque de código de muestra dentro de mi archivo de componentes xml personalizado, olvidé agregar el nombre del campo dentro de mi tabla de base de datos personalizada.

Entonces, por ejemplo: list_templates del ejemplo xml

Necesita ir a la base de datos MYSQL dentro de mi tabla de componentes de esta manera:

nombre de columna: list_templates tipo de columna: TEXTO

Básicamente porque sus datos JSON y se ajusta mejor dentro de una columna de tipo TEXTO.

Próximo...

Hubo un error en el que al cerrar el Modal y luego volver a abrirlo duplicaría el contenido que agregue.

Para solucionar esto, encontré el archivo repeatable.js ubicado dentro de media/system/js e hice una copia de seguridad del mismo. Luego pegué la versión sin comprimir en js repetible y descubrí que al cambiar esta línea:

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

a esto

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

Que realmente corrige el error de duplicación. He hecho varias pruebas para ver si está haciendo lo correcto y realmente lo está haciendo. No se produce pérdida de datos y ya no se duplican datos. Puede abrir y cerrar el cuadro modal tantas veces como desee y solo le mostrará las selecciones que guardó.

He intentado esto cerrando el archivo de vista y volviendo a abrir los datos también y varios otros métodos que funcionan.

¡Y por último!

Debido a que quería hacer eco del contenido del JSON dentro de mi vista como una tabla debajo del botón de selección, también agregué un par de cosas a repetible/js para permitirme poder guardar y aplicar después de hacer clic en el botón Guardar dentro del modal.

Esto significa que cuando hago clic en Guardar en el campo modal repetible, la página se guarda y aplica, lo que me permite recopilar los datos directamente del campo de columna de la tabla para mostrar en la página.

Lo logré agregando las siguientes dos cosas.

Una función para obtener el view = componentnameview de la 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;
  }

y luego configurando una variable para ver así

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

y luego después de la línea 341

Agregué esto

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

Ahora el botón Guardar modal hace lo suyo y luego joomla guarda el elemento y sabe en qué vista de componente se guarda y permanece en la página. Esto me permite recopilar los datos de la tabla, pero también guarda el contenido dentro de los campos repetibles modales en caso de que el usuario pensara que lo estaban guardando y accidentalmente hizo clic en cerrar en el grupo de botones predeterminado del elemento.

Espero poder ayudar a alguien con mi respuesta/publicación. Si no es apropiado poner todo esto, házmelo saber y lo moveré a otro lado.

-

6
Jonnypixel