Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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);
Opa fabyo mals ai agora tá ai o DB para vcs testarem ^^
Como coloco imagens e link pra funcionar como menu ????como coloco em tabelas, etc....???Agradeco pela ajuda!!!!
eu tambem quer saber se pode se usar como menu, colocando imagens???
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.
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?
AEEEEEEEEE, era exatamente isso q eu estava procurando , perfeto :)
clagils,o seu funcionou direitinho os -- e | ?aqui nao divide corretamente...
opa
parabens pelo script, mas cade o banco pra nois testa ? = )