Implementação de Menus de Navegação Responsivos com KnpMenu em PHP

KnpMenu é uma biblioteca PHP especializada na criação e gerenciamento de menus de navegação para websitse. Esta implementação prática demonstra como construir menus responsivos utilizando KnpMenu, abordando desde configurações iniciais até funcionalidades avançadas.

Instalação e Configuração Inicial

Para utilizar KnpMenu, adicione a dependência via Composer no seu projeto:

composer require knplabs/knp-menu

Após a instalação, crie uma instância da fábrica de menus e defina a estrutura básica:

use Knp\Menu\MenuFactory;

$criadorDeMenu = new MenuFactory();
$navegacaoPrincipal = $criadorDeMenu->createItem('raiz');
$navegacaoPrincipal->addChild('Início', ['uri' => '/inicio']);
$navegacaoPrincipal->addChild('Serviços', ['uri' => '/servicos']);
$navegacaoPrincipal->addChild('Contato', ['uri' => '/contato']);

Estrutura de Menus Multinível

KnpMenu permite aninhar itens para criar hierarquias complexas. Veja como configurar um menu com subitens:

$menuPrincipal = $criadorDeMenu->createItem('navegacao');

$itemPai = $menuPrincipal->addChild('Produtos');
$itemPai->addChild('Eletrônicos', ['uri' => '/produtos/eletronicos']);
$itemPai->addChild('Roupas', ['uri' => '/produtos/roupas']);

$subItem = $itemPai->addChild('Categorias');
$subItem->addChild('Smartphones', ['uri' => '/produtos/eletronicos/smartphones']);

Renderização com Twig

Integre KnpMenu ao Twig para renderizar menus nos templates. Registre a extensão do KnpMenu na configuração do Twig e utilize:

{{ knp_menu_render('navegacao_principal') }}

Para personalizar a aparência, especifique um temlpate alternativo:

{{ knp_menu_render('navegacao_principal', {'template': 'meu_template_menu.html.twig'}) }}

Destaque Automático de Itens do Menu

Utilize o Matcher do KnpMenu para identificar e destacar o item do menu correspondente à página atual. Exemplo com votação baseada em rotas:

use Knp\Menu\Matcher\Matcher;
use Knp\Menu\Matcher\Voter\RouteVoter;

$seletorDeItens = new Matcher();
$seletorDeItens->addVoter(new RouteVoter($pilhaDeRequisicoes));

$renderizador->render($menuPrincipal, ['matcher' => $seletorDeItens]);

Design Responsivo para Menus

Para adaptar menus a dispositivos móveis, adicione classes CSS personalizadas aos itens do menu. KnpMenu facilita isso através de atributos:

$navegacaoPrincipal->addChild('Blog', [
    'uri' => '/blog',
    'attributes' => ['class' => 'item-nav'],
    'linkAttributes' => ['class' => 'link-nav']
]);

Combine essas classes com media queries e JavaScript para implementar comportamentos como colapso em telas pequenas.

Menipulação Avançada de Menus

A classe MenuManipulator oferece utilitários para reorganizar menus programaticamente. Exemplo de reordenação:

use Knp\Menu\Util\MenuManipulator;

$organizador = new MenuManipulator();
$organizador->reorderChildren($menuPrincipal, ['Início', 'Serviços', 'Blog', 'Contato']);

Este utilitário também permite mover itens entre menus ou duplicar estruturas conforme necessário.

Tags: PHP KnpMenu Menus de Navegação Design Responsivo Twig

Publicado em 6-13 23:00 por Thomas