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 uma 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 busca, 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 (por exemplo,"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
parentType: null, // "page" | "custom" | null - kind of the parent
itemType: "page", // "page" | "custom" - kind of this item
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 ao percorrer 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)
Dois tipos de item de menu: itemType e parentType
Um menu contém dois tipos de item - páginas de menu e itens personalizados - e seus ids vêm de sequências diferentes, então eles se sobrepõem: parentId: 5 sozinho não diz se o pai é a página com id 5 ou o item personalizado com id 5.
Dois campos resolvem isso:
itemType('page' | 'custom') - o que este item é.parentType('page' | 'custom' | null) - o que seu pai é.nulljunto comparentId: nullsignifica que o item é de nível superior.
Os filhos de um item carregam seu itemType como seu parentType, então combine o par quando você reconstruir a árvore você mesmo:
const childrenOf = (items, parent) =>
items.filter(
(item) => item.parentId === parent.id && item.parentType === parent.itemType,
);
📋 O Que Você Precisa Saber
Menus são criados no painel de administração
Você não pode criar menus via o SDK - eles são criados no painel de administração do OneEntry (Menus → Criar Menu → Adicionar Páginas → Salvar) ou via a API de Administração. O SDK é para buscar 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 carregam 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()). Busque 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 | Buscar 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 (por exemplo, header_menu, footer_menu, sidebar_menu) e busque 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- busque 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