Navigation Menus
| Campo | Valor |
|---|---|
| Handler | admin/handlers/navigation.go |
| Ruta base | /admin/navigation |
| Modelo | navigation_menus, navigation_menu_items |
| Estado | Implementado |
Descripción
El módulo de navegación permite crear y gestionar menús de navegación para la tienda. Soporta menús jerárquicos (padre-hijo), megamenús con feature cards, y múltiples menús independientes (header, footer, sidebar).
Endpoints
Menús
| Método | Ruta | Acción |
|---|---|---|
| GET | /admin/navigation | Listar menús |
| POST | /admin/navigation | Crear menú |
| GET | /admin/navigation/:id | Editar menú |
| PUT | /admin/navigation/:id | Actualizar menú |
| DELETE | /admin/navigation/:id | Eliminar menú |
Items
| Método | Ruta | Acción |
|---|---|---|
| POST | /admin/navigation/:id/items | Agregar item |
| PUT | /admin/navigation/:id/items/:item_id | Actualizar item |
| DELETE | /admin/navigation/:id/items/:item_id | Eliminar item |
| POST | /admin/navigation/:id/items/reorder | Reordenar items |
| POST | /admin/navigation/:id/items/:item_id/children | Agregar sub-item |
Campos
NavigationMenu
| Campo | Tipo | Descripción |
|---|---|---|
id | UUID | Identificador único |
tenant_id | UUID | Tenant propietario |
handle | string | Slug único (auto-generado) |
name | string | Nombre del menú |
created_at | timestamp | Fecha de creación |
updated_at | timestamp | Última actualización |
item_count | int | Conteo de items raíz (computed) |
NavigationMenuItem
| Campo | Tipo | Descripción |
|---|---|---|
id | UUID | Identificador único |
menu_id | UUID | Menú padre |
parent_id | UUID? | Item padre (null = raíz) |
label | string | Texto visible |
url | string? | URL del enlace |
type | enum | page, collection, product, custom, heading |
page_id | UUID? | Referencia a página CMS |
position | int | Orden dentro del padre |
open_new_tab | bool | Abrir en nueva pestaña |
feature_image_url | string? | Imagen para megamenú |
feature_title | string? | Título del feature card |
feature_url | string? | URL del feature card |
Jerarquía
Los items se cargan como estructura plana desde la BD y se construye el árbol en memoria:
Menu "Principal"
├── Inicio (page)
├── Tienda (collection)
│ ├── Ropa (collection)
│ ├── Accesorios (collection)
│ └── [Feature Card: Nueva Colección]
├── Blog (custom: /blog)
└── Contacto (page)
Notas
- El
handlese auto-genera del nombre conslugifyHandle()(reemplaza acentos, espacios, caracteres especiales) - Los items de tipo
headingsirven como separadores en megamenús - Los feature cards son opcionales y se usan para banners promocionales en megamenús
- La reordenación se hace con position (enteros) y se recalculará al guardar