ti-enxame.com

Como criar um recurso repetitivo de campo de formulário xml?

Estou construindo um componente personalizado e tudo está bem. Eu pensei em experimentar o novo recurso de campo de formulário XML repetitivo de 3,2. Apesar de tê-lo funcionando, não sei como salvar os dados.

Ele permite que eu inicie um modal e, dentro desse modal, crie até 999 campos personalizados que eu especificar. Mas o botão verde de salvar no modal fecha o modal e na verdade não aplica o salvamento?

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

Cheers antecipadamente

Jonny

7
Jonnypixel

Ok, aqui está a resposta para minha própria pergunta e algumas observações e correções.

Em primeiro lugar, ao usar o bloco de código de amostra no meu arquivo de componente xml personalizado, deixei de adicionar o nome do campo na minha tabela de banco de dados personalizada.

Então, por exemplo: list_templates do exemplo xml

Precisa entrar no banco de dados MYSQL na minha tabela de componentes da seguinte forma:

nome da coluna: list_templates tipo de coluna: TEXT

Basicamente, porque seus dados JSON e ele se encaixam melhor dentro de uma coluna do tipo TEXT.

Próximo...

Havia o erro em que, ao fechar o Modal e reabri-lo, duplicaria o conteúdo adicionado.

Para corrigir isso, encontrei o arquivo repeatable.js localizado em media/system/js e fiz uma cópia de backup dele. Em seguida, colei a versão não compactada em js repetíveis e descobri que, alterando esta linha:

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

para isso

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

Que ele realmente corrige o erro de duplicação. Eu fiz vários testes para ver se está fazendo a coisa certa e realmente está. Nenhuma perda de dados está ocorrendo e nenhum dado está sendo duplicado. Você pode abrir e fechar a caixa modal quantas vezes quiser e ela apenas mostrará as seleções salvas.

Eu tentei isso fechando o arquivo de exibição e reabrindo os dados também e vários outros métodos que estão funcionando.

E por fim!

Como eu queria ecoar o conteúdo do JSON na minha visualização como uma tabela abaixo do botão de seleção, também adicionei algumas coisas ao repetable/js para permitir que eu pudesse salvar e aplicar depois de clicar no botão de salvar no modal.

Isso significa que, quando clico em salvar nos campos repetíveis, a página salva e se aplica, permitindo que eu colete os dados diretamente do campo da coluna da tabela para exibir na página.

Consegui isso adicionando as seguintes coisas.

Uma função para obter a view = componentnameview do 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, em seguida, definindo uma varibale para exibição como essa

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

e depois da linha 341

Eu adicionei isso

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

Agora, o botão Salvar modal faz sua parte e, em seguida, o joomla salva o item e sabe em qual componente o visualiza e o salva e permanece na página. Isso me permite coletar os dados da tabela, mas também salva o conteúdo dentro dos campos repetíveis modais, caso o usuário pensasse que estava salvando e clicou acidentalmente em fechar no grupo de botões padrão do item.

Espero poder ajudar alguém com minha resposta/post. Se não for apropriado colocar tudo isso, deixe-me saber e eu vou movê-lo para outro lugar.

-

6
Jonnypixel