Criando um menu com infinitas categorias e subcategorias

Postado por Paulo Brito em 05 de Julho de 2010  •  Comentários (0)  • 

Imagine que você queira criar um menu com inúmeras categorias e essas categorias possam ter N sub-categorias e sub-sub-categorias. Para fazer isso vamos usar uma tabela em um banco de dados com apenas três campos: idCategoria, titulo e idCategoriaPai.

Abaixo podemos ver nossa tabela com um exemplo:

idCategoria | titulo | idCategoriaPai
-------------------------------------------
1 | Computadores | 0
-------------------------------------------
2 | Portáteis | 1
-------------------------------------------
3 | Notebook | 2
-------------------------------------------
4 | Netbook | 2
-------------------------------------------
5 | 15 polegadas | 3
-------------------------------------------

O efeito que queremos é o mostrado abaixo:

+ Computadores
...+ Portáteis
.....+ Notebook
.......- 15 polegadas
.......- NetBook

Como podemos ver, a categoria principal não é filho de ninguém logo idCategoriaPai = 0(zero). Como "Portatéis" está dentro da categoria "Computadores" o idCategoriaPai = 1 e assim por diante. Então para "montar" essa a hierarquia das categorias é necessário usar uma função recursiva, ou seja, uma função que chama ela mesmo.

O código PHP que faz essa ordenação é mostrado abaixo:

function criarMenu($categoriaPai) {
echo "<ul>";

// Parte-1
// Seleciona os registros do banco
$categorias = new ProdutoCategoria();
$where = "categoriaPai =".$categoriaPai;
$categorias = $categorias->select($where);

// Passando por cada resultado encontrado no banco de dados
foreach($categorias as $row) {
echo "<li>".$row["categoria"];
criarMenu($row["idCategoria"]); // recursividade
echo "</li>";
}
echo "</ul>";
}

A parte1 do código acima utiliza uma classe para obter os dados armazenados em um banco de dados. Caso você não esteja usando classes, outra forma de fazer essa consulta ao banco é utlizando os comandos:

$sql = "Select * from categorias WHERE categoriaPai =".$categoriaPai;
$qry = mysql_query($sql);
while($row = mysql_fetch_array($qry)) { ... }"

Para chamar essa função no seu código basta digitar: criarMenu(0)
O zero passado como argumento indica que você vai mostrar todas as categorias, desde as que não possuem pais.

Note que o menu é formado utilizando <li> e <ul>, essa forma é muito utilizada para menus dropdown, onde o javascript que cria os efeitos do menu.


  • Download
  • Código fonte
  • Comentar
  • Comentários
blog comments powered by Disqus

Comentários ir para topo

Código fonte ir para topo