Terça-feira, 18 de dezembro de 2007 às 18h35

Breadcrumb Navigation: Navegação em Categorias

Faltam 0 dias! Inscreva-se agora! O maior encontro de profissionais web da américa latina.

Quando você visualiza um produto num site qualquer, como o Mercado Livre, normalmente lhe é mostrado algo como:

Informática -> Notebooks e Laptops -> AMD Turion 64 X2 -> HP e Compaq -> HP TX1119us

Isto diz, para o usuário, que ele está visualizando um Notebook com processador AMD Turion 64 X2 dos fabricantes HP e Compaq e com modelo HP TX1119us. Instintivamente, se o usuário quiser ver todos os notebooks com este processador, independente de marca, ele clicará no link que está escrito o nome do processador. Da mesma forma, se quiser ver todos os modelos de notebooks HP ou Compaq, clicará no link correspondente.

Como Fazer

Como todo script que percorrerá um número indefinido de níveis de hierarquia, existem duas possibilidades: fazê-lo recursivamente ou iterativamente. No artigo citado acima, utilizei um codigo recursivo. Para ser mais didático e democrático, dessa vez preferi utilizar um código iterativo.

Eis o código comentado:
<?php
#Resgata o valor da categoria passada pela query string
$cat = isset( $_GET['cat'] ) ? abs( intval( $_GET['cat'] ) ) : '1';
#Array que conterá o breadcrumb
$breadcrumb = array();
#Inclui o arquivo de abstração de banco de dados
require_once( 'class.bd.php' );
#Cria o objeto que manipulará o BD
$bd = new bd();
#Query SQL para resgatar os dados da categoria passada pela query string
$sql = 'select * from locais where ativo=\'S\' and id='.$cat;
#Executa a query SQL
$query = $bd->query( $sql );
#Se a categoria passada não existir
if ( $bd->num_rows( $query ) == 0 ) {
    #Assume que a categoria será a padrão (default)
    $cat = 1;
    $breadcrumb[] = array( 'titulo' => 'Raiz', 'id' => $cat );
}
#Se não é a categoria padrão
if ( $cat != 1 ) {
    #Resgata os dados da categoria
    $campos = $bd->fetch_assoc( $query );
    #Faça
    do {
        #Adiciona ao array breadcrumb os dados
        $breadcrumb[] = $campos;
        #Query SQL para resgatar os dados da categoria pai
        $sql = 'select * from locais where ativo = \'S\' and id = (select id_pai from locais where id = '.$campos['id'].')';
        #Executa a Query SQL
        $query = $bd->query( $sql );
        #Resgata os dados da categoria pai
        $campos = $bd->fetch_assoc( $query );
    #Enquanto o número de linhas for diferente de 0
    } while ( $bd->num_rows( $query ) != 0 );
}
#Inverte o array breadcrumb
$breadcrumb = array_reverse( $breadcrumb );
#Iniciliza a variável de saída
$saida = '';
#Percorre todos os itens do breadcrumb
foreach( $breadcrumb as $chave => $dados ) {
    #Monta a string de saída
    $saida .= '<a href="?cat='.$dados['id'].'" title="'.$dados['titulo'].'">'.$dados['titulo'].'</a> » ';
}
#Remove de $saida o elemento separados
$saida = substr( $saida, 0, -3 );
#Exibe a saida
echo 'Você está em: '.$saida;
?>

Como é de praxe, para utilizar os meus códigos normalmente você precisará fazer adaptações: tabelas e campos do banco de dados, strings de conexão, css, html, etc.

Grande abraços!

3 comentários

 Uélio Nobre
31/01/2008 16h54

Assim nao valw

Cara foi boa a luz que vc deu a nos brasileiro...
mas assim.. ficaria mais facil de entender se vc postasse a sua classe de abstração.. para depois fazermos as nossas entendeu?
Abraço!

 Thiago Ferreira
01/02/2008 07h30

Resposta ao Uélio Nobre

Uélio, aqui está a classe de abstração de BD:
http://www.tmferreira.com.br/blog/2007/06/22/classe-para-abstracao-de-banco-de-dados-mysql-e-php4/

 Agostinho Bello do Santos Junior Bello
15/01/2009 01h23

preciso da estrutura do bd

preciso da estrutura do bd
ficaria muito grato se passasse a estrutura do banco p mim ter ideia o link acima n existe +
valeu otima materia

Cancelar resposta

Qual a sua opinião?

Faça login abaixo ou cadastre-se rapidamente.


Sobre o Autor
Thiago Ferreira mais conhecido como tmferreira (tmferreira@bol.com.br) e é formado em Análise de Sistemas pela Universidade Salgado de Oliveira. Trabalha desde 2005 com desenvolvimento WEB, na FatorClick (http://www.fatorclick.com.br). Também mantém um blog (http://www.tmferreira.com.br/blog/) sobre desenvolvimento WEB, onde escreve sobre PHP, Javascript, Banco de Dados e Webstandards.

2001 - iMasters FFPA Informática Ltda - Todos os direitos reservados.