Designer PHP: Menu dinâmico com If e Else
12 de Abril de 2008 | Arquivado em Programação, Traduções |
Esta é a tradução livre do artigo Designer PHP: A Dynamic Menu with If and Else, escrito pelo Jon Tan. Resolvi fazer a tradução do artigo por ser um ótimo guia para pessoas que estão começando a programar em PHP. Além disso, o próprio autor encoraja as pessoas a traduzir seus artigos.
Correções podem ser enviadas nos comentários.
No artigo Simple PHP Include eu mostrei como reutilizar um arquivo em várias páginas. Se você está começando a usar PHP, recomendo dar uma lida nele antes. Agora vamos tornar a inclusão de arquivos um pouco mais útil. Neste artigo, vamos incluir um arquivo que contém o menu de navegação mas vamos fazer com que algumas opções apareçam destacadas, a depender da página que está sendo acessada.
Para realizar isso precisamos fazer três coisas:
- Declarar uma variável em cada página, que dirá ao menu qual estado exibir.
- Criar um arquivo com os estados “destacado” e “normal” para cada ítem de menu. Adicionar um trecho de código PHP para permitir mudança do estado de acordo com a variável.
- Incluir o menu em todas as páginas.
Declaração da variável PHP
A declaração da variável deve estar em todas as páginas que o menu vai ser exibido. Também deve estar antes da linha de código que inclui o menu, para que este possa ler seu conteúdo. Eu costumo declarar a variável antes do <!DOCTYPE… para separar o código PHP do HTML o máximo possível. A declaração da variável na minha página ficou assim:
$page = ‘home’;
?>
<!DOCTYPE…
- O nome da variável $page é sempre o mesmo. Você pode mudar para qualquer outra coisa, desde que permaneça o mesmo em todas as páginas.
- O valor ‘home’ será diferente para cada página. Isso dirá ao menu o que exibir.
Eu costumo fazer com que o valor seja igual à área do site. No exemplo que estamos desenvolvendo, será ‘home’ para a página principal, ‘about’ para uma página sobre mim e por aí vai. Você pode mudar o valor para o que quiser e ter quantos valores desejar.
Criar o arquivo do Menu para ser incluído
Neste exemplo nós vamos criar um menu dinâmico para um site fictício com três páginas: “Principal”, “Sobre mim” e “Contato”. Você pode usar essa idéia e aplicar para quantas páginas achar necessário. Este é um exemplo HTML básico para o menu:
<ul>
<li><a href="index.php">Principal</a></li>
<li><a href="about.php">Sobre mim</a></li>
<li><a href="contact.php">Contato</a></li>
</ul>
</div>
Vamos definir duas opções para cada item de menu: “live”, para os itens selecionados, e um normal, para os itens não selecionados. Neste exemplo, vamos associar uma classe ao item selecionado - <li class=”live”> - e colocar o link dentro de uma tag <em> para diferenciá-la, mesmo se os estilos estiverem desativados no navegador. Por exemplo: na página principal, o item do menu selecionado vai acabar parecendo com isso:
<em><a href="index.php">Home</a><em>
</li>
Para alternar entre as opções “live” e normal vamos usar as sentenças if e else do PHP. Este é o menu HTML com PHP:
<ul>
<?php if ($page == ‘home’) { ?>
<li class="live">
<em><a href="index.php">Principal</a></em>
</li>
<?php } else { ?>
<li><em><a href="index.php">Principal</a></em></li>
<?php } ?>
<?php if ($page == ‘about’) { ?>
<li class="live">
<em><a href="about.php">Sobre mim</a></em>
</li>
<?php } else { ?>
<li><a href="about.php">Sobre mim</a></li>
<?php } ?>
<?php if ($page == ‘contact’) { ?>
<li class="live">
<em><a href="contact.php">Contato</a></em>
</li>
<?php } else { ?>
<li><a href="contact.php">Contato</a></li>
<?php } ?>
</ul>
</div>
Copie o código em um novo arquivo no seu editor preferido. Salve-o como nav.php, dentro de um diretório chamado inc na raiz do seu site.
Deixe-me explicar o que o PHP faz. Cada item do menu está marcado de duas formas: uma versão “live”, para os itens selecionados, e uma normal. A variável que nós declaramos diz ao PHP qual opção do menu exibir. Por exemplo, se $page = ‘home’; for declarada, a sentença if ( <?php if ($page == ‘home’) { ?> ) irá exibir a opção “live”. Se home não está declarada, então a sentença <?php } else { ?> será processada e a opção normal será exibida.
Para fazer com que outros itens do menu fiquem “live”, basta ajustar a variável. O menu vai pegar e alternar o código HTML. Simples. Este é o nosso menu, criado e pronto para uso. O próximo passo é incluir em todas as páginas.
Como incluir o menu
Para fazer isso vamos usar a mesma técnica explicada no artigo Simple Include, porém nós vamos incluir o arquivo do menu, que chamamos de nav.php. Este é o código PHP que você vai precisar:
Coloque este código aonde você deseja que o menu seja exibido. O caminho (‘inc/nav.php’) que aponta para nav.php é relativo - lembre-se de mudar se todas as suas páginas não estão na raiz do site. Cada uma das suas páginas vai parecer com algo assim (com o valor * alterado de acordo com a página):
$page=‘*’;
?>
<!DOCTYPE… >
<html>
<head>… </head>
<body>
<?php include ‘inc/nav.php’; ?>
conteúdo
</body>
</html>
E isso é tudo! Agora você pode se aventurar e estilizar seu menu com CSS. Se você precisar mudar alguma coisa basta alterar o nav.php e todas as páginas serão atualizadas. Fácil, não é? Vamos finalizar com algumas dicas sobre erros e segurança.
Localizando erros de PHP
Se aparecerem um bocado de erros na sua página ao invés do menu, há uma grande possibilidade de o caminho dos includes estar errado. Verifique se ele está apontando corretamente para nav.php, considerando o caminho da página que está chamando o menu.
É bom saber que você pode acessar o arquivo no seu navegador e ver o menu. Por exemplo: http://seusite.com.br/inc/nav.php.
Se o caminho estiver errado você irá se deparar com um erro 404.
Se nenhum item de menu estiver ativo, ou se algum item estiver incorretamente ativo em uma página, verifique a variável declarada no topo da mesma. Ela coincide com a condição if que precede o ítem que você quer destacar no arquivo nav.php?
Se você já fez tudo isso e ainda está tendo problemas cheque a sintaxe dos códigos linha a linha. Há chances de você ter cometido um pequeno erro. É chato fazer isso, mas é uma boa maneira de aprender.
Segurança
Eu conversei com o guru de segurança em aplicações web, Chris Shiflett, pedindo que ele checasse meu código PHP. Isso foi o que ele disse:
Sempre que você estiver trabalhando com uma linguagem de programação que é executada no servidor é bom que esteja a par dos potenciais problemas de segurança, porque um simples erro é necessário para criá-los. Se você seguir o exemplo do Jon está a salvo, mas o que aconteceria se você precisasse modificar o código para que ele se adeque às suas necessidades?
Ao invés de complicar esse ótimo tutorial, eu vou apenas dizer que você deve pesquisar um pouco antes de fazer uma das coisas a seguir:
- Adicionar qualquer código PHP aos seus includes
- Utilizar uma variável em sua sentença include. Por exemplo: include “inc/$variavel”
Se você precisar fazer alguma das coisas descritas acima, deve ler um pouco mais sobre execução remota de código (em inglês: remote code execution).
Leitura posterior
Estruturas de controle do PHP.
