Menu TreeView Dinâmico com PHP e MySQL

O JQuery, possui uma classe que se aplicada as listas <ul>....<li>, gerar um menu com a visualização ao lado, porém, eu precisei que este mesmo menu fosse gerado dinamicamente utilizando a consulta no banco de dados.

 Vejam como foi criado a lógica.

Criando a tabela.

CREATE TABLE IF NOT EXISTS `menu` (
  `caminho` varchar(250) DEFAULT NULL,
  `descricao` varchar(250) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

....inclusão dos dados na tabela
 
INSERT INTO `base_de_conhecimentos` (`caminho`, `descricao`, `solucao`) VALUES
	('1', 'Item 1', NULL),
	('2', 'Item 2', NULL),
	('3', 'Item 3', NULL),
	('1/1', 'Item 1/1', NULL),
	('1/2', 'Item 1/2', NULL),
	('2/1', 'Item 2/1', NULL),
	('3/1', 'Item 3/1', NULL),
	('3/2', 'Item 3/2', NULL),
	('3/3', 'Item 3/3', NULL),
	('3/3/1', 'Item 3/3/1', NULL),
	('3/3/2', 'Item 3/3/2', NULL),
	('3/3/3', 'Item 3/3/3', NULL),
	('3/3/3/1', 'Item 3/3/3/1', NULL);

código php

 <?
//conexao
mysql_connect("127.0.0.1","root","****");
//seleciona o banco
mysql_select_db("banco");
//consulta
$consulta = mysql_query("Select caminho, descricao From menu Order by caminho")or die(mysql_error());
$maior_nivel = 0; 
//REALIZA A PESQUISA NO BANCO DE DADOS E ARMAZENA O RESULTADO EM VETORES
while($aux_consulta = mysql_fetch_assoc($consulta)){	
	$root 		= substr($aux_consulta['caminho'],0,(strlen($aux_consulta['caminho'])-1));	
	$root_vetor = explode("/",$root);	
	$count_vetor= count($root_vetor)-1;
	if ( !empty($root) ) {
		$li[ $root ][] 		= $aux_consulta['caminho'];
	} else {
		$li_root[] = $aux_consulta['caminho'];
	}
	$descricao[ $aux_consulta['caminho'] ] = $aux_consulta['descricao'];
	if ($maior_nivel < $count_vetor )
		$maior_nivel = $count_vetor;
}
//FUNCAO PARA REPETIÇÃO DOS <UL> E <LI>
function vetor_li($lis,$li,$descricao){
	echo '<ul>';
	foreach($li[ $lis ] as $key2 => $lis2 ){
		$lis3 = $lis2.'/';
		if ( isset($li[ $lis3 ]) ){
			echo '<li class="closed"><span class="folder">'.$descricao[$lis2].'</span>';		
			vetor_li($lis3,$li,$descricao);
		}else{
			echo '<li><span class="file">'.$descricao[$lis2].'</span>';
		}
		echo '</li>';
	}
	echo '</ul>';
}
echo '<ul id="browser" class="filetree">';
foreach($li_root as $key => $lis){
	echo '<li class="closed"><span class="folder">'.$descricao[$lis].'</span>';
	$lis = $lis.'/';
	if ( isset($li[ $lis ]) ){
		echo '<ul>';
		foreach($li[ $lis ] as $key2 => $lis2 ){
			$lis3 = $lis2.'/';
			if ( isset($li[ $lis3 ]) ){
				echo '<li class="closed"><span class="folder">'.$descricao[$lis2].'</span>';
				vetor_li($lis3,$li,$descricao);
			} else {
				echo '<li><span class="file">'.$descricao[$lis2].'</span>';
			}
			echo '</li>';
		}
		echo '</ul>';
	}
	echo '</li>';	
}

echo '</ul>';
/**/
?>

2 comentários:

Ricardo Carvalho disse...

Adorei o blog, continue postando, no site Scriptcase contem algumas informações sobre.

Ricardo Carvalho disse...

ótimo artigo parabéns continue postando, tem um outro site que eu recomendo tambem Scriptcase.

Postar um comentário

Leia as regras:
Todos comentários são lidos e moderados previamente.
são publicados aqueles que respeitam as regras abaixo:

-Seu comentário precisa ter relação com o assunto do post;
-Não inclua links desnecessários no conteúdo do seu comentário
-Se quiser deixar sua URL, comente usando a opção Comentar como:OpenID

OBS: comentários dos leitores não refletem as opniões do blog.