Agregar elementos de menú
Un módulo con backend suele necesitar entradas en el menú lateral del administrador o en el menú de configuración. Para eso, el módulo declara un proveedor de menú que se descubre automáticamente y engancha sus nodos en el árbol de menús del núcleo (ver Menús).
El proveedor de menú del módulo
Crea una clase que derive de AdminMenuProveedor y sobrescribe ConstruirMenuBase, que recibe el nodo del árbol de menús donde puedes adjuntar tus elementos:
using Crono.Colecciones;
using Crono.Nucleo.Contenidos.Menus;
using Crono.Web.Renderizacion.Constructores;
public class AdminMenu : AdminMenuProveedor
{
protected override void ConstruirMenuBase(ArbolNodo<MenuElemento> nodoModulos)
{
// Ubica el nodo padre existente (por su Id) al que quieres colgarte.
var nodoContabilidad = nodoModulos.Raiz.SeleccionarNodoPorId("contabilidad");
if (nodoContabilidad is null)
return;
var comprobantes = new MenuElemento().AlConstructor()
.Id("contabilidad-comprobantes")
.Texto("Comprobantes electr.")
.ClaveRecurso("Admin.Contabilidad.ComprobantesElectronicos")
.NombresPermisos(FacturacionPermisos.ComprobanteElectronico._)
.Accion("Lista", "ComprobantePago", new { area = "Contabilidad" })
.ComoElemento();
nodoContabilidad.Adjuntar(comprobantes, "contabilidad-comprobantes");
}
}
El constructor de MenuElemento
El patrón fluido new MenuElemento().AlConstructor()...ComoElemento() arma cada entrada. Métodos habituales:
| Método | Efecto |
|---|---|
.Id("...") | Identificador único del nodo (clave para adjuntarlo y para que otros lo referencien). |
.Texto("...") | Texto por defecto. |
.ClaveRecurso("...") | Clave de recurso de idioma para el texto localizado (tiene prioridad sobre Texto). |
.NombresPermisos(...) | Permiso(s) requeridos; el elemento se oculta si el usuario no los tiene (ver Seguridad). |
.Accion("Accion", "Controlador", new { area = "..." }) | Ruta MVC a la que apunta el elemento. |
Adjuntar y jerarquía
nodo.Adjuntar(elemento, "id") cuelga el elemento del nodo y devuelve el nodo recién creado, sobre el que puedes adjuntar hijos:
var nodoComprobantes = nodoContabilidad.Adjuntar(comprobantes, "contabilidad-comprobantes");
var detalle = new MenuElemento().AlConstructor()
.Id("contabilidad-comprobantes-detalle")
.Texto("Detalle")
.ClaveRecurso("Admin.Contabilidad.ComprobantesElectronicos.Detalle")
.Accion("Detalle", "ComprobantePago", new { area = "Contabilidad" })
.ComoElemento();
detalle.Oculto = true; // accesible por ruta pero no visible en el menú
nodoComprobantes.Adjuntar(detalle, "contabilidad-comprobantes-detalle");
La propiedad Oculto = true es útil para páginas de detalle o edición: existen en el árbol (para migas de pan y resolución de ruta) pero no aparecen como opción del menú.
Menú lateral y menú de configuración
Un mismo proveedor puede aportar a varios menús. El módulo de facturación, por ejemplo, engancha su listado en el menú lateral de contabilidad y sus catálogos (tipos de documento, numeraciones) bajo el nodo de configuración configuracion-contabilidad, seleccionando cada nodo padre por su Id y adjuntando allí sus elementos.
Localiza siempre el texto con .ClaveRecurso(...) en lugar de dejar solo .Texto(...), y declara los textos en el recursos.{cultura}.xml del módulo (ver Localización de módulos).