Introdução
Recupere menus de navegação de site em múltiplos níveis construídos a partir de páginas configuradas no OneEntry.
Mais informações sobre a interface do usuário do módulo https://doc.oneentry.cloud/docs/category/menu
🎯 O que este módulo faz?
O módulo Menus permite que você recupere estruturas de navegação do site - menus de cabeçalho, menus de rodapé, navegação de barra lateral, menus móveis - construindo dinamicamente navegação em múltiplos níveis a partir de páginas configuradas no OneEntry.
Você cria menus no painel de administração do OneEntry (ligando páginas entre si) e este módulo busca a árvore completa do menu, para que você possa renderizar a navegação dinamicamente sem codificar links. O SDK é somente leitura para menus - você os recupera, não os cria via código.
🚀 Início Rápido
Inicialize o módulo a partir de defineOneEntry:
const { Menus } = defineOneEntry( "your-project-url", { "token": "your-app-token" });
Recupere um menu pelo seu marcador e percorra suas páginas:
// Fetch the "main_menu" structure in English.
const menu = await Menus.getMenusByMarker("main_menu", "en_US");
console.log(menu.identifier, menu.localizeInfos.title);
// Top-level items; nested items live in each item's children[].
menu.pages.forEach((item) => {
console.log(item.pageUrl, item.localizeInfos.title, item.children);
});
✨ Conceitos Chave
O que é um Menu?
Um Menu (IMenusEntity) é uma estrutura de navegação que liga páginas entre si:
identifier- o marcador do menu (ex:"main_menu")localizeInfos- o título do menu localizadopages- o array de itens do menu (cada item é uma página)
Estrutura do Item do Menu
Cada item em pages é um objeto IMenusPages:
{
id: 123, // Page ID
pageUrl: "home", // Page URL (marker)
localizeInfos: { title: "Home" },
attributeValues: {}, // Custom attribute values
parentId: null, // null for top-level items
position: 1, // Display order
children: [] // Nested menu items
}
Hierarquia do Menu
Menus suportam estruturas aninhadas. O aninhamento é expresso através do array children[] de cada item junto com seu parentId (itens de nível superior têm parentId: null). Não há um campo de profundidade separado - você determina a profundidade percorrendo children[].
📂 Header Menu
├─ Home (parentId: null)
├─ About (parentId: null)
│ ├─ Team (parentId: 2)
│ └─ History (parentId: 2)
├─ Products (parentId: null)
│ └─ Electronics (parentId: 4)
│ ├─ Phones (parentId: 5)
│ └─ Laptops (parentId: 5)
└─ Contact (parentId: null)
📋 O que Você Precisa Saber
Menus são criados no painel de administração
Você não pode criar menus via SDK - eles são criados no painel de administração do OneEntry (Menus → Criar Menu → Adicionar Páginas → Salvar) ou via Admin API. O SDK é para recuperar estruturas de menu.
Itens de menu são páginas
Cada item de menu é uma página configurada no OneEntry - você não pode adicionar links arbitrários. Para adicionar um link externo, crie uma página com uma URL externa no Módulo de Páginas e adicione-a ao menu.
Ordenar por posição
Os itens possuem um campo position - ordene por ele para respeitar a ordem de exibição configurada no painel de administração.
Multi-idioma
Menus são localizados pelo langCode passado para getMenusByMarker() (revertendo para o idioma definido em defineOneEntry()). Recupere menus no idioma preferido do usuário.
📊 Tabela de Referência Rápida
| Método | Descrição | Caso de Uso |
|---|---|---|
| getMenusByMarker() | Obter menu por marcador | Recuperar uma estrutura de menu específica |
❓ Perguntas Comuns (FAQ)
Como eu crio um menu de múltiplos níveis (dropdown)?
Construa a árvore do menu no painel de administração aninhando páginas. O aninhamento é retornado através do array children[] de cada item - renderize-o recursivamente.
Posso adicionar links externos aos menus?
Os itens de menu devem ser páginas configuradas no OneEntry. Para adicionar um link externo, crie uma página com uma URL externa no Módulo de Páginas, e então adicione-a ao seu menu.
Como eu lido com o estado do item de menu ativo?
Compare a URL da página atual com o pageUrl de cada item e aplique uma classe ativa quando elas coincidirem.
Como eu construo breadcrumbs?
Rastreie a partir da página atual através das relações de parentId (Início > Categoria > Subcategoria > Página Atual).
Posso ter menus diferentes para seções diferentes?
Sim - crie múltiplos menus com marcadores diferentes (ex: header_menu, footer_menu, sidebar_menu) e recupere cada um com getMenusByMarker().
🎓 Melhores Práticas
- Use marcadores, não IDs - marcadores são estáveis entre ambientes.
- Renderize
children[]recursivamente - é assim que o aninhamento é representado. - Ordene por
position- respeite a ordem de exibição configurada. - Cache os menus - eles raramente mudam.
- Passe
langCode- recupere o menu no idioma do usuário. - Lide com menus ausentes de forma elegante - forneça uma alternativa quando o marcador não for encontrado.
🔗 Documentação Relacionada
- Módulo de Páginas - Gerencie as páginas que compõem seus menus
- Módulo de Locales - Suporte multi-idioma para localização de menus
- Módulo de GeneralTypes - Tipos de página usados em menus