Ir para o conteúdo

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

Montar Treeview apartir das tabela (Regiao,Estado,Municipio)

17 de Julho de 2012, 10:45 , por Desconhecido - | Ninguém seguindo este artigo por enquanto.
Visualizado 84 vezes

Bom dia a todos,

Estive pesquisando como estrutura uma treeview apartir das tabelas Regiao,Estado,Municipio

Tentei fazer meio que uma gambiarra,

   $regioes = TbRegiaoDAO::selectRegia();
   foreach($regioes['COD_REG'] as $k=>$v)
   {
       $tree->addItem(null,$a,$regioes['COD_REG'][$k].' - '.$regioes['DESCRICAO'][$k].' -'. $a);   
       $estados = TbProjetosDAO::selectEstados($regioes['COD_REG'] [$k]);
        foreach($estados ['COD_ESTADO'] as $k=>$v)
        {
           .........
        }
  }

+1-NORTE
|     +ESTADO 1.1
|             | +MUNICIPI 1.1.1
|             | +MUNICIPI 1.1.2
|             | +MUNICIPI 1.1.3
|     +ESTADO 1.2
|            | +MUNICIPI 1.2.1
|            | +MUNICIPI 1.2.2
+2-NORDETE
|            | +ESTADO 2.1
|            | +ESTADO 2.2
|            |       | +MUNICIPI 2.2.1
+3-SUDESTE
+4-SUL
+5-CENTRO
+6- OESTE

 

Alguem pode mi dar uma luz como eu posso fazer melhor?

Agradeço desde já

Autor: Luis Almeida


33 comentários

  • 51b06d6eae66e2cfdfc361d418eea715?only path=false&size=50&d=404Luis Eugênio barbosa(usuário não autenticado)
    18 de Julho de 2012, 0:10

     

    Luis,

    para esta solução a melhor forma será uma treeview que carrege dinamicamente à medida que é expandida, pois carregar todos os muniícipios de uma só vez não é uma boa solução.

    Para isso minha sugestão é criar uma visão juntando os registros das 3 tabelas ( região, uf e município) em uma view no banco de dados adicionando o prefixo R,E,M nos codigos das chaves primárias das tabelas pois podem haver codigos iguais. Então os codigos das regiões ficariam assim R1, R2, R3... dos estados E1,E2, E3 e dos municípios M1,M3,M3, e por fim configuraria o campo treefield para carregar a partir desta visão.

    Exemplo: assumindo que a visão seria chamada vw_tree_regiao_uf_mun e seus campos seriam ID, ID_PAI e NOME, o campo treeview ficaria assim:

        $tree = $frm->addTreeField('tree','Extados x Municípios','vw_tree_regiao_uf_mun','ID_PAI','ID','NOME');

    Para melhor exemplificar eu adicionei um novo exemplo na pasta base/exemplos chamado exe_tree_view_4.php e tambem no banco de exemplo bdApoio.s3db ( sqlite ) criei uma visão assim: ( baixe ou atualize o codigo fonte do FormDin )

    -- ler os registros da tabela uf, como ela é o primeiro nivel, o id_pai deve ser nulo, no seu caso será a tabela região o primeiro nivel.

    select 'uf'||cod_uf as id , null as id_pai, nom_uf as nome
    from tb_uf

    union all
    -- ler os registros da tabela municipio, segundo nivel ligada ao primeiro nivel pela coluna id_pai
    select  'mu'||cod_municipio as id, 'uf'||cod_uf as id_pai , nom_municipio as nome
    from tb_mu

    No sqlite para concatenar o prefixo + a chave deve ser utilizado os caracteres ||, isto voce deve verificar no seu banco de dados como é a sintaxe.

    Espero ter ajudado.

    Abraço.

    • F11255c3ccec97d9ad0bfa683c82d0a6?only path=false&size=50&d=404Luis Almeida(usuário não autenticado)
      20 de Julho de 2012, 11:22

       

      Luis Eugênio

      Muto obrigao  pela dica

      Funcionou beleza

      Só que, tenho que aprimora mais esta treeview.

      Tenho scripit na tela login que verifica qual o usuario e qual estado ele tem direito de acesso. Dai ele monta a arvore de municipios que ele posde acessar.

      Pensei em faser pela propria "tela exe_tree_view.php" enviar esta condição/parametro porem da maneira que voçe me orientou não encontre como faze lo 

      • 51b06d6eae66e2cfdfc361d418eea715?only path=false&size=50&d=404Luis Eugênio barbosa(usuário não autenticado)
        22 de Julho de 2012, 13:38

         

        Luis,

        para que você possa implementar esta funcionalidade, você não poderá utilizar o arquivo padrão da do FormDin que gera o xml da treeView, portanto terá que criar um novo módulo e informar a treeview para utiliza-lo.

        Neste aquivo, sempre que ele receber o $_REQUEST['id'] iniciado por 'R' de região, então o sql vai ser alterado para filtrar somente os estado que o usuário tem acesso.

        Para melhor exemplificar como fazer isso, criei um novo exemplo de treeview com esta funcionalidade, no meu caso estou utilizando um campo select do formulário para selecionar a uf que será filtrada, mas poderia ser uma variavel de sessão.

        Atualize os fontes do FormDin via SVN ou baixe a nova versão e veja o arquivo exe_tree_view_5.php, tambem coloquei no menu da aplicação de exemplo em Containes->TreeView->Uf x Região com SetXmlFile()

        Veja como fiz e tente adaptá-lo para sua aplicação.

        Abraço.

Essa comunidade não possui posts nesse blog