Saudações, meus amigos!
No artigo de hoje, vou ensinar a personalizar a famosa trilha de navegação, também conhecida como migalhas-de-pão ou simplesmente breadcrumbs.
Imagine que você deseja formatar uma trilha de navegação para ser exibida da seguinte forma:
Página Inicial » Seção » Página atual (sem link).
Ao mesmo tempo, preciso adicionar classes que identifiquem a posição de cada elemento dentro da trilha, para me ajudar a aplicar a formatação desejada.
Bom, este problema é dividido em duas partes. Temos uma etapa de configuração de comportamento do elemento, e outra de configuração de apresentação. Para a primeira etapa utilizaremos um módulo, e para a segunda, uma função de tema.
Inclusive existe mais de uma opção para a configuração de trilhas de navegação. Eu usei aquela que foi mais interessante para mim naquele momento, e sinta-se a vontade de fugir do meu senso e usar o módulo que for mais adequado para você ou para sua situação.
Mas antes, uma palavrinha sobre as trilhas de navegação
Sabe, devo confessar que nesses 6 anos que mexo com Drupal eu nunca entendi direito como funcionavam as trilhas de navegação. Nunca entendi como elas exibiam o caminho completo de onde eu estava na administração, mas nas páginas que eu criava para o site, eu só conseguia um único item na trilha (o da página inicial).
Como a maior parte dos sites que eu desenvolvo são muito simples, não possuem mais que três níveis de profundidade de links, acabei por abdicar do uso de breadcrumbs.
Mas veja só você, hoje eu fiz uma pequena pesquisa para este tutorial, e descobri uma pequena coisa, óbvia até, mas incrivelmente essencial para o entendimento das migalhas-de-pão:
(pausa dramática)
As trilhas de navegação utilizam o menu Navegação para sua criação.
PAM PAM PAAAAM!!!
(se isso fosse um podcast, colocaria uma voz com eco ao falar essa frase)
Sério, essa frase simples e óbvia acima esclareceu completamente o funcionamento dos breadcrumbs, além de que essa informação já seria suficiente para alterar 50% deste artigo.
Mas não vou modificar nem uma linha do tutorial, pois ele não fica menos válido (apenas uma forma diferente de resolver as coisas). E o registro do aprendizado também é importante.
Adicionando uma trilha de navegação para uma seção em seu site
Atualmente, a forma mais simples, prática e rápida de trabalhar sites no Drupal é usar Tipos de conteúdo e Views para criar as seções de um site. Por exemplo, se eu tenho uma seção chamada "Serviços", eu vou criar um tipo de conteúdo chamado de Serviço, e criar uma página para agregar todos os conteúdos criados como Serviço, utilizando Views.
Para adicionar uma trilha que aponte para a página de Serviços, você vai utilizar o módulo Custom Breadcrumbs.
Não irei explicar como este módulo funciona. A configuração do módulo é bem simples, e além disso, o foco deste tipo de artigo não é configuração de módulos, e sim trechos de código. Mas deixo abaixo uma captura da página de configuração do mesmo, afinal uma imagem vale mais que mil palavras.

Finalmente, o Snippet: alterando o HTML da trilha de navegação
Ufa, finalmente chegamos ao climax deste tutorial. Ao seu âmago: o código.
Recapitulando o que eu disse lá em cima: precisamos alterar o código HTML da trilha de navegação para exibir uma classe que irá marcar a posição de cada item da trilha. E também precisamos adicionar a página atual na trilha, mas sem nenhum link (até porque adicionar um link para a própria página não faria qualquer sentido).
Para isso utilizaremos a função theme_breadcrumb. Ela deve ficar no arquivo template.php do seu tema. Não esqueça de modificar o nome da função de theme_breadcrumb para NOMEDOSEUTEMA_breadcrumb. O código é o seguinte:
-
function NOMEDOSEUTEMA_breadcrumb($variables) {
-
$breadcrumb = $variables['breadcrumb'];
-
if (!empty($breadcrumb)) {
-
// Provide a navigational heading to give context for breadcrumb links to
-
// screen-reader users. Make the heading invisible with .element-invisible.
-
$output = '<h2 class="element-invisible">' . t('You are here') . '</h2>';
-
$breadcrumb[] = '<span class="current-page">'. drupal_get_title() . '</span>';
-
$array_size = count($breadcrumb);
-
$i = 0;
-
$crumbs = '';
-
while ( $i < $array_size) {
-
$crumbs .= '<span class="breadcrumb-' . $i;
-
if ($i == 0) {
-
$crumbs .= ' first';
-
}
-
if ($i+1 == $array_size) {
-
$crumbs .= ' last';
-
}
-
$crumbs .= '">' . $breadcrumb[$i] . '</span>';
-
$i++;
-
}
-
$output .= '<div class="breadcrumb">'. $crumbs .'</div>';
-
return $output;
-
}
-
}
Explicando o código:
- Linha 2: carrega a variável de tema 'breadcrumb' (um array) para dentro de nossa própria variável.
- Linha 3: testa se a variável não é vazia, caso seja verdadeiro, executa o resto do código.
- Linha 6: providencia um cabeçalho navegacional para dar contexto aos links da trilha, para ajudar os usuários de leitores de tela.
- Linha 7: adiciona o título da página atual ao final do array $breadcrumb.
- Linha 8: conta o número de itens no array $breadcrumb.
- Linhas 9 e 10: cria duas variáveis que serão úteis para o loop que vem a seguir.
- Linha 11: executa um Loop, onde um trecho do código será repetido até que a condição não seja mais satisfeita. Ou seja, o código será executado enquanto a variável $i for menor que o número de itens contidos em $breadcrumb.
- Linhas 12 a 18: cria elementos span com as classes breadcrumb-0, breadcrumb-1... breadcrumb-n, além das classes breadcrumb-first e breadcrumb-last para o primeiro e último item da trilha, respectivamente. Esses span irão envolver os links de cada item da trilha.
- Linha 19: aqui nós envolvemos cada elemento de $breadcrumb (que são links que compõe a trilha) com os elementos span explicados acima.
- Linha 20: adiciona +1 à nossa variável de iteração.
- Linha 22: por fim, adiciona uma div container aos itens da nossa trilha.
- Linha 23: retorno do $output, ou seja, da nossa nova trilha de navegação formada.
Bem, chegamos ao fim de mais um artigo, que no final saiu mais longo do que planejado. Espero que o mesmo seja proveitoso, e até a próxima!
E não deixem de me acompanhar no Twitter, eu costumo postar muitos links referentes ao Drupal, além muita abobrinha não relacionada.