Ir para o conteúdo

 Voltar a Fórum do For...
Tela cheia

Botões automáticos do Gride - seguindo o tutorial do CRUD - não funcionam

21 de Janeiro de 2014, 12:59 , por Desconhecido - | 2 Pessoas seguindo este artigo.
Visualizado 150 vezes


Prezados,

Sou iniciante neste assunto e estou tendo muita dificuldade com um aspecto. Já tentei solucionar de várias maneiras mas não consegui, por isso peço sua ajuda.  Essa condição está acontecendo com todos os meus formulários que, por padrão, constituem de um conjunto de campos para inserção de dados e um gride que apresenta os registros inseridos para exclusão e alteração. 

 O problema é que os botões de alteração e exclusão do grid, criados automaticamente, não funcionam.

Segue o exemplo.

 Tabela no banco MySQL:

Nome da Tabela: Obj_Instituicao

Colunas: Num_Instituicao (AI,PK),Nom_Instituicao

Arquivo registrar_instituicao.php

<?php
$frm = new TForm('Registro de Instituição');
// para exemplificar o uso do campo html e da inclusão de um arquivo css externo
$frm->addHtmlField('mensagem','<br><left><span class="FonteVermelha">Campos em vermelho são obrigatórios</span></left>');
 
// adicionar o campo hidden para a coluna chave da tabela.
$frm->addHiddenField('Num_Instituicao');
 
$frm->addTextField('Nom_Instituicao','Nome da Instituição:',100,true,50);
 
// Botoes não mexer
$frm->addButton('Salvar','salvar','btnSalvar',null,null,true,false);
$frm->addButton('Limpar','limpar','btnLimpar',null,null,false,false);
 
// criar o campo html vazio para receber o gride.
$frm->addHtmlField('gride','Grade de Instituições');
 
// criarção do gride
$g = new TGrid(
                'gd' // id do gride
                ,'Instituições Registradas'
                ,Obj_InstituicaoDAO::SelectAll('Nom_Instituicao')// array de dados
                ,null
                ,null
                ,'Num_Instituicao'); // chave da tabela
 
 
// adicionar o gride como conteúdo do campo html
$frm->set('gride',$g);

// processar as ações do diretório action/
$frm->processAction();
 
$frm->show();
?>

 

Arquivo action/gd_alterar.php

<?php
// recuperar a Instituição pelo Num_Instituicao selecionado no gride
$dados =  Obj_InstituicaoDAO::select($frm->get('Num_Instituicao'));

// atualizar os campos do form com os dados da Instituição

$frm->set('Num_Instituicao',$dados['NUM_INSTITUICAO'][0]);
$frm->set('Nom_Instituicao',$dados['NOM_INSTITUICAO'][0]);


?>

Arquivo action/gd_excluir.php

 <?php
Obj_InstituicaoDAO::delete($frm->get('Num_Instituicao'));
?>

Os arquivos Obj_InstituicaoDAO e Obj_InstituicaoVO foram criados pelo gerador automático.

Os botões Salvar e Limpar funcionam perfeitamente.

Agradeço pela atenção.

Autor: Cláudia de Aguiar


77 comentários

  • 54a7c4a15d159fa1263f658905a2b92c?only path=false&size=50&d=404Marcelo Lopes(usuário não autenticado)
    22 de Janeiro de 2014, 11:32

     

    Bom dia Cláudia! Seja bem-vinda!

    Observe que no seu form, após o $frm->show(); e após finalizado o php  em ?>, deverá haver os scripts com as ações a serem chamadas nos botões do gride. Como estão esses scripts? Poste-os para analisarmos.

    Marcelo Lopes 

    • 40039becdad4241880bbec097c167704?only path=false&size=50&d=404Cláudia de Aguiar(usuário não autenticado)
      5 de Fevereiro de 2014, 16:44

       

      Boa tarde, Marcelo!

       Obrigada pela pronta resposta, e desculpa por levar tanto tempo para dar o retorno.

      Pelo que havia entendido do manual do CRUD, não havia necessidade de scripts para chamar ações dos botões automáticos do grid (que aparecem quando não se adiciona nenhum botão: alterar e excluir).  Scripts serviriam apenas para chamar as ações de botões adicionais.

       Botões adicionais eu fiz, com scripts, e estão funcionando beleza.  São os botões automáticos de excluir e alterar que não funcionam.  Talvez por falta de scripts mesmo, porque eu havia entendido pelo tutorial que não era necessário, da mesma forma que o botão Salvar.  Será que entendi errado?

      Se é necessário script, para que os arquivos dentro da pasta action, então?  Melhor seria tratar tudo dentro do scrtipt, não é mesmo?

      Eu realmente não entendo muito disso...  Os arquivos que postei como gd_excluir.php e gd_alterar.php estão na pasta action, e são o único tratamento para excluir e alterar os campos do grid que fiz.

      • Cff659012a9d95f8837b6d50d8c14c69?only path=false&size=50&d=404Jair de Jesus(usuário não autenticado)
        5 de Fevereiro de 2014, 18:46

         

        O FormDin trabalha mais ou menos assim:

        Dentro do diretório de cada módulo deverá existir uma pasta chamada "action" (sem as aspas) e dentro dela os scripts .php correspondente.

        Ex.:
        Botão Salvar, dentro de "action" o arquivo salvar.php

        Botão Alterar, dentro de "action" o arquivo alterar.php

        Botão Excluir, dentro de "action" o arquivo excluir.php

        Antes da declaração dos botões no form, declare:
        $frm->processAction();

        Esse trecho de código fará com que o framework busque as ações no diretório "action" e fará o processamento necessário,
        Quanto aos javascripts podem ser declarados tanto depois do fechamento da tag php "?>" entre as tags "<script></script>", como também em um arquivo separado só para isso.

        Ex.:
        Se o arquivo de módulo se chama aluno.php, no mesmo diretório crie o arquivo aluno.js e declare nele os scripts javascript e não precisa colocar as tags "<script></script>" de javascript neste arquivo.   

        • 40039becdad4241880bbec097c167704?only path=false&size=50&d=404Cláudia de Aguiar(usuário não autenticado)
          11 de Fevereiro de 2014, 16:19

           

          Jair,

          Adorei a dica sobre colocar os scripts em um arquivo separado com extensão .js ao invés de utilizar as tags script no fim do arquivo.

           Mas sua resposta ainda não soluciona meu problema.  Conforme coloquei na minha descrição, criei os arquivos gd_excluir.php e gd_alterar.php dentro do diretório /action conforme descrito no tutorial do CRUD, mas o botão do grid não funciona.

          • Cff659012a9d95f8837b6d50d8c14c69?only path=false&size=50&d=404Jair de Jesus(usuário não autenticado)
            11 de Fevereiro de 2014, 20:18

             

            Arquivo action/gd_alterar.php 

            <?php 

            //Acrescente essas duas linhas para testar o funcionamento do botão

            print_r($_POST); //Vai imprimir na tela o array$_POST

            exit(); //Vai fazer a execução desse script parar nessa linha, não vai processar as linhas de baixo

            // recuperar a Instituição pelo Num_Instituicao selecionado no gride 

            $dados =  Obj_InstituicaoDAO::select($frm->get('Num_Instituicao')); 

            // atualizar os campos do form com os dados da Instituição 

            $frm->set('Num_Instituicao',$dados['NUM_INSTITUICAO'][0]); 

            $frm->set('Nom_Instituicao',$dados['NOM_INSTITUICAO'][0]); 

            ?>

            Se aparecer algo na tela como: Array() então o botão funciona, ai o que está dando errado é o código abaixo
            Se não aparecer nada, ai o código do botão não foi executado. E o que depende dele também não,

             depois de resolver essa etapa, remova ou comente as linhas acima

             

            • 40039becdad4241880bbec097c167704?only path=false&size=50&d=404Cláudia de Aguiar(usuário não autenticado)
              12 de Fevereiro de 2014, 20:38

               

              Legal!  Deu o Array(), então o código é que está errado.
              1) Copiei e colei errado do tutorial do CRUD, ou pelo meu parco entendimento fiz alguma alteração que não deveria;
              2) Está errado no tutorial ou não corresponde à versão do software que estou usando...

              'bora quebrar a cabeça... 

              Muito obrigada!

  • 40039becdad4241880bbec097c167704?only path=false&size=50&d=404Cláudia de Aguiar(usuário não autenticado)
    31 de Março de 2014, 18:56

     

    Prezados,

     Depois de muito tentar e bater cabeça, o Luiz Eugênio me deu uma mão por Skype.

     O erro que cometi foi colocar os nomes das colunas/nomes dos campos com letras em maiúsculas.

    É preciso sempre usar LETRAS MINÚSCULAS!!!

    Coisa de menininha... ok, Solucionado, e corrigido.  Tudo funcionou depois de mudar todos os nomes para minúsculas.

Essa comunidade não possui posts nesse blog