Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Perfect Lion

Menu Arvore

Recommended Posts

Fala galera tudo certo.. bem depois eu ter apanhando muito para achar essa logica peguntando em varios lugares e sem exito .. resolvi usar minha cuca para funcionar.. e tá ai o resultado...

 

Primeiro agradeço ao Jair Issa que me ajudo na 1° logica mais ainda estava havendo alguns erros ai resolvi mecher nela e melhorei o codigo.. ficando muito mais agil e funcional a ela mesmo ;)

 

 

Resultado

 

* Pai   |-- Filho1	 |-- Filho1	   |-- Filho1		 |-- Filho1	 |-- Filho2* Pai2   |-- Filho   |-- Filho2	 |-- Filho1

Bem é isso ai ele cria infinitos subMenus de Submenus.. ;)

 

 

<ul><?//require( "conecta.php" );$connect = mysql_connect("localhost","root","");mysql_select_db("dados",$connect);function getMenuOption($id=0,$conta=1,$pertence=0){			#:: SQL para selecionar os Ids			$sql = mysql_query( "select * from link where pertence = '$id' order by posicao" );			$traco = str_repeat("--", 2); #:: ou coloca 1 para ficar somente com 1 vez a repetição;)			$espaco = str_repeat("  ", $conta); #:: ou coloca um $conta no lugar do 2 para dar espaço 			while( $i = mysql_fetch_array( $sql ) ) { #:: criar um while de quantos foram encontrados dentro de cada 1	   			$id_busca = $i["id"]; #:: recupera a id				if($i["pertence"] == $pertence){ #:: verifica se o pertence é o valor padrão do pai					$options .= "<li>{$i["nome"]}</li>\r\n"; # contatena essa linha a mais para a variavel $options				}elseif($id != $id_anterior){ #:: verifica se o $id é igual ao $id_anterior					  $conta++; #:: acrecenta mais 1 para a variavel $conta					$id_anterior = $id; #:: define um valor para o id anterior					$options .= "<li>{$espaco}| {$traco} {$i["nome"]}</li>\r\n"; # contatena essa linha a mais para a variavel $options 			 	}else{					$options .= "<li>{$espaco}| {$traco} {$i["nome"]}</li>\r\n"; # contatena essa linha a mais para a variavel $options				}			 	$options .= getMenuOption($id_busca,$conta); #:: chama novamente a função com o novo ID para recuperar as informações sobre seus filhos			}			return $options; #:: retorna o contéudo}echo getMenuOption();?></ul>

Bem ta ai ^^

 

Edit.

Banco de dados

 

CREATE TABLE `link` (  `id` int(11) NOT NULL auto_increment,  `nome` varchar(60) default NULL,  `endereco` varchar(10) default NULL,  `posicao` int(11) NOT NULL,  `pertence` int(11) default NULL,  PRIMARY KEY  (`id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=22;INSERT INTO `link` (`id`, `nome`, `endereco`, `posicao`, `pertence`) VALUES (1, 'LINK', '', 1, 0),(2, 'Sites de busca', '', 0, 1),(3, 'Google', '', 1, 2),(4, 'Yahoo', '', 0, 2),(19, 'Nivel 2 L4', NULL, 0, 18),(18, 'Nivel 1 L4', NULL, 0, 17),(17, 'LINK4', NULL, 0, 0),(10, 'Windows', '', 0, 5),(11, 'Windows 98', '', 1, 10),(12, 'Windows XP', '', 0, 10),(13, 'LINK2', 'http://', 2, 0),(14, 'Link do Segundo Nivel', NULL, 0, 13),(15, 'Link do Link do Segundo Nivel', NULL, 0, 14),(16, 'Link do Link do Link do Segundo Nivel', NULL, 0, 15),(20, 'Nivel 3 L4', NULL, 0, 19),(21, 'Nivel 4 L4', NULL, 0, 20);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa fabyo mals ai agora tá ai o DB para vcs testarem ^^

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu tive a necessidade de usar categorias com subniveis, vim aqui e pff encontrei logo o que precisava, eu estou a fazer bastantes alterações ao script, agora dá para mostrar em tabelas o código, mover uma categoria para cima ou para baixo, ver a screenshot.

 

Imagem Postada

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alterei a parte do código:$options .= "<li>{$i["nome"]}</li>\r\n"; // contatena essa linha a mais para a variavel $options }elseif($id != $id_anterior){ // verifica se o $id é igual ao $id_anterior $conta++; // acrecenta mais 1 para a variavel $conta $id_anterior = $id; // define um valor para o id anterior $options .= "{$espaco} {$espaco} {$i["nome"]}</br>"; // contatena essa linha a mais para a variavel $options }else{ $options .= "{$espaço} {$espaço}{$i["nome"]}</br>"; # contatena essa linha a mais para a variavel $options }porque ele não estava exibindo corretamente os |'s e --'sPor exemplo:Pai1 | -- Filho 1 | -- Filho 2 | -- Filho 1 de Filho de 2 | Filho 3Pai2a linha de Filho 1 de Filho 2 que é um submenu não ficava mais "afastada", ele exibia tdo em uma sequencia só.como altero isso??e outra, preciso saber como inserir pra "expandir" o menu, estilo explorer?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.