Fóruns sobre PHP, JavaScript, HTML, MySQLi, jQuery, Banco de Dados, CSS


Moderador: web

 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 166
Nome: Bruno Bandeira
Sexo: Masculino
Contato:

Montar menu árvore com base no BD

12-04-2010 09:16

Bom dia a todos!
Gostaria de fazer um faq em formato de arvore
Ex.:

Categoria -> Pergunta 1 -> Pergunta 2 -> Perguntas 3 -> Pergunta X

Vendas(categoria) -> Vanda a vista(Pergunta 1) -> Venda a vista dentro do estado(Pergunta 2) -> Venda a vista dentro do estado(Pergunta x)

Tudo vindo do banco, como fazer esses relacionamentos?

Abraco a todos

:geek:
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17562
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Montar menu árvore com base no BD

12-04-2010 09:26

MOVIDO: de PHP para MySQL

Ainda não usei essa estrutura de hierarquia, mas te indico alguns links sobre esse assunto

http://dev.mysql.com/tech-resources/art ... -data.html
http://articles.sitepoint.com/print/hie ... a-database
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 166
Nome: Bruno Bandeira
Sexo: Masculino
Contato:

Montar menu árvore com base no BD

12-04-2010 10:23

Eu traduzi e consegui entender!
A gente podia fazer um documentacao dessas, tendo em vista que nao temos nada desse genero em portugues!

:ugeek:
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17562
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Montar menu árvore com base no BD

12-04-2010 12:49

Realmente, provavelmente em breve deve já ter uma versão traduzida no próprio site.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 166
Nome: Bruno Bandeira
Sexo: Masculino
Contato:

Montar menu árvore com base no BD

14-04-2010 15:35

Eu ja resolvi o problema, vou organizar o material e posto como um tutorial!

So uma duvida..
Eu tenho a arvore

1.1 Tronco
1.2 Galho
1.1 Tronco
1.2 Galho
Tendo em vista que esses dados retornam de banco de dados e que (1.1, 1.2) sao numeros identificadores. Como faco as divs irem abrindo conforme o clique sendo qe os identificadores sao iguais. e quando peco pra abrir um da conflito?

Thanks

:fubar:
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17562
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Montar menu árvore com base no BD

14-04-2010 16:18

Como é que você está fazendo? Clica na div "tronco" e mostra o "galho"?
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 166
Nome: Bruno Bandeira
Sexo: Masculino
Contato:

Montar menu árvore com base no BD

14-04-2010 16:20

Isso mesmo.
Depois eu clico no galho e abre outro galho.. e por diante! :@
heheh
Abracos
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17562
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Montar menu árvore com base no BD

14-04-2010 16:58

A idéia melhor seria criar um valor increment.

Ou seja, a cada laço do while o valor seria incrementado:

$valor = 0; while...{ $valor++; }

Na primeira rodada: 0, depois 1, etc...

Como suponho que tronco e galho são criados no mesmo laço, aplica algo tipo:

// div tronco
...byId('div$valor')...

Ai a div galho no mesmo laço vai ter o mesmo id
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 166
Nome: Bruno Bandeira
Sexo: Masculino
Contato:

Montar menu árvore com base no BD

19-04-2010 17:41

Web, vou mostrar todo o meu codigo

criacao das tabelas
tbl_dados

CREATE TABLE `tbl_dados` ( `cod_dados` INT(11) NOT NULL AUTO_INCREMENT, `titulo` VARCHAR(255) NULL DEFAULT NULL, `resposta` TEXT NULL, `indice` CHAR(1) NULL DEFAULT 'N', `ind_ativo` CHAR(1) NULL DEFAULT 'S', PRIMARY KEY (`cod_dados`) ) ENGINE=InnoDB; INSERT INTO `tbl_dados` VALUES (1,'VENDAS',NULL,'S','S'); INSERT INTO `tbl_dados` VALUES (2,'VENDAS A VISTA','','N','S'); INSERT INTO `tbl_dados` VALUES (3,'VENDA A PRAZO','','N','S'); INSERT INTO `tbl_dados` VALUES (4,'A PRAZO NO CARTAO','','N','S'); INSERT INTO `tbl_dados` VALUES (5,'A PRAZO NO CHEQUE','','N','S'); INSERT INTO `tbl_dados` VALUES (6,'A VISTA NO CARTAO','','N','S'); INSERT INTO `tbl_dados` VALUES (7,'A VISTA EM DINHEIRO','','N','S'); INSERT INTO `tbl_dados` VALUES (8,'A VISTA NO CHEQUE','','N','S'); INSERT INTO `tbl_dados` VALUES (9,'PAGAMENTO EM 2X','','N','S'); INSERT INTO `tbl_dados` VALUES (10,'PAGAMENTO EM 3X','','N','S');

tbl_rel
CREATE TABLE `tbl_rel` ( `cod_rel` INT(11) NOT NULL AUTO_INCREMENT, `parent` VARCHAR(255) NULL DEFAULT NULL, `title` VARCHAR(255) NULL DEFAULT NULL, `resposta_faq` TEXT NULL, PRIMARY KEY (`cod_rel`) ) ENGINE=MyISAM; INSERT INTO `tbl_rel` VALUES (1,NULL,'1',NULL); INSERT INTO `tbl_rel` VALUES (2,'1','2',''); INSERT INTO `tbl_rel` VALUES (3,'1','3',''); INSERT INTO `tbl_rel` VALUES (4,'3','4',''); INSERT INTO `tbl_rel` VALUES (5,'3','5',''); INSERT INTO `tbl_rel` VALUES (6,'2','6',''); INSERT INTO `tbl_rel` VALUES (7,'2','7',''); INSERT INTO `tbl_rel` VALUES (8,'2','8',''); INSERT INTO `tbl_rel` VALUES (9,'5','9',''); INSERT INTO `tbl_rel` VALUES (10,'5','10','');

Criei um tabela com os dados e outra para o relacionamento/cruzamento dos dados.

Tendo isso dentro do meu <head></head> eu tenho a seguinte funcao js
<script language="javascript"> function camada( sId ) { var sDiv = document.getElementById( sId ); if( sDiv.style.display == "block" ) { sDiv.style.display = "none"; } else { sDiv.style.display = "block"; } } </script>

e no corpo eu tenho o seguinte

<div id="corpo_center"> <?php mysql_connect('xxxxxxxxx', 'xxxxxxxxxxxxx', 'xxxxxxxxx'); mysql_select_db('xxxxxxxxx'); $consult = mysql_query("select r.title as title, d.titulo as titulo from tbl_rel r inner join tbl_dados d on r.title = d.cod_dados where r.parent is null and r.title = '".$_GET['parent']."'"); while($linha = mysql_fetch_array($consult)){ echo "<strong>".$linha['titulo']."</strong>&nbsp;&nbsp;<a href='nova_faq.php?parent=".$linha['title']."&title=".$_GET['parent']."'><img src='../img/add.png' width='12px' heigth='12px' title='Adicionar pergunta nessa ponto!' border='0' /></a>"; } function display_children($parent, $level) { // retrieve all children of $parent $result = mysql_query("SELECT r.title as title, d.titulo as titulo, r.cod_rel as cod_rel, d.resposta as resposta, d.ind_ativo as ind_ativo FROM tbl_rel r INNER join tbl_dados d on r.title = d.cod_dados WHERE parent = '$parent' and d.ind_ativo = 'S'"); echo "<ul class='questions'>"; // display each child while ($row = mysql_fetch_array($result)) { // indent and display the title of this child if($row['ind_ativo'] == 'S'){ $ind_ativo = "../img/thumb_up.png"; $ind_at = 'S'; } else { $ind_ativo = "../img/thumb_down.png"; $ind_at = 'N'; } echo "<li class='estilo'>"; echo "<a href='javascript:void(0)' onclick='camada(".$row['cod_rel'].")'>"; echo str_repeat(' ',$level).$row['titulo']."\n"; echo "&nbsp;&nbsp;</li><div id='".$row['cod_rel']."' style='display:none; color:' class='stamp'><strong>R:</strong> <font color='#FF0000'>".$row['resposta']."</font><br /></div>"; // call this function again to display this // child's children display_children($row['title'], $level+1); } echo "</ul>"; } display_children($_GET['parent'],0); ?> </div>

depois chame a pagina assim: dados.php?parent=1

Nao tem jeito de conseguir abrir um a um! conforme vai clicando abrindo as divs
me salva!

:sweat:
0
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 166
Nome: Bruno Bandeira
Sexo: Masculino
Contato:

Montar menu árvore com base no BD

19-04-2010 17:46

Cara eu nao trabalho com essa bagunca de codigo, mas foi o unico jeito. Normalmente eu separo html de php. :(
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17562
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Montar menu árvore com base no BD

19-04-2010 18:04

Rodei seu script, e ví que cada link tem a resposta, o que não está conseguindo?
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 166
Nome: Bruno Bandeira
Sexo: Masculino
Contato:

Montar menu árvore com base no BD

20-04-2010 09:09

na verdade eu quero que qdo eu execute o codigo apareca so as <li> primarias, cliccando em alguma delas, abra a proxima ramificacao, depois a proxima e por diante!
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17562
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Montar menu árvore com base no BD

20-04-2010 09:44

Eu acho que você fez a ramificação ao contrário, porque primeiro você tem que ter o JavaScript, que faz esse efeito de ramificação, tipo, tem um link, cria e mostra o conteúdo relacionado, ai quando você tem esse script, sua consulta é feita em cima dele.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 166
Nome: Bruno Bandeira
Sexo: Masculino
Contato:

Montar menu árvore com base no BD

20-04-2010 10:24

Desconsidera o ajax.
Seguinte, eu faco uma consulta unica. as ramificacacoes ficam escondida, e ao ponto que vou clicando vai aparecendo!
:shock:
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17562
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Montar menu árvore com base no BD

20-04-2010 11:07

Você tem que fazer uma consulta para retornar só os itens principais, tipo, as categorias:

carros

motos

Dentro de cada while, vai ter uma sub-consulta, pegando o a associação dessa categoria para retornar os itens associados

carros

SELECT * FROM suatabela WHERE id='id relacionado a carro'
{
fusca
gol
...
}

motos...

Essa query dentro de carro vai ficar dentro de uma div display none

Na palavra carro, vai ter um link que ativa essa div relacionada.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 166
Nome: Bruno Bandeira
Sexo: Masculino
Contato:

Montar menu árvore com base no BD

20-04-2010 11:17

O problema eh que eu posso ter infinitas ramificacoes!
ai como vou fazer? :mrgreen:
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17562
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Montar menu árvore com base no BD

20-04-2010 11:51

Vai ter o id em comum. Entre o link e a div, que vai ser o id em ambas as tabelas.

No link vai ter algo como:

<a href="javascript://" onclick="document.getElementById('div<?php echo $id; ?>')">...</a>

Na div que está no mesmo ramo, vai ter algo tipo:

<div id="div<?php echo $id; ?>">conteúdo gerado...</div>

Quando você criar no link, vai carregar a mesma div que está dentro do while, porque vão ter id em comum.

div1, div2, etc...
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 166
Nome: Bruno Bandeira
Sexo: Masculino
Contato:

Montar menu árvore com base no BD

20-04-2010 15:20

nao sei como explicar :x
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17562
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Montar menu árvore com base no BD

20-04-2010 16:34

Eu entendi mais ou menos o que você quer fazer, mas o caminho a seguir não é começar pela query, e sim por um script que faça o que precisa, clica e aparece dados referente aquele link, quando você montar a estrutura HTML, ai sim você insere sua consulta, para pegar os dados e organizar de acordo.
0
A melhor hospedagem para o seu site HostGator!

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado