sc_appmenu_add_item("Menu_Name", "Id_Item", "Id_Parent", "Label", "Aplication", "Parameters", "Icon", "Hint", "Target", "mega menu")

La macro sc_appmenu_add_item agrega dinámicamente elementos a la aplicación de menú iniciada por la macro sc_appmenu_create.

Es importante destacar que, para la creación de un menú dinámico utilizando macros, la aplicación no debe contener ningún ítem creado manualmente en la interfaz de Ítems del Menú.

Sintaxis

// Inicializa el menú dinámico. Esta llamada es obligatoria antes de usar sc_appmenu_add_item
sc_appmenu_create("nombre_app_menu");

// Agrega un ítem al menú dinámico ya inicializado
sc_appmenu_add_item(
  "nombre_app_menu",
  "id_item",
  "id_item_padre",
  "etiqueta",
  "aplicacion",
  "parametros",
  "icono",
  "tooltip",
  "target",
  "megamenu"
);

Parámetros

Parámetro Obligatorio Permite Vacío Descripción y ejemplo
nombre_app_menu No Recibe el nombre de la aplicación de menú donde se crearán los ítems. Acepta texto fijo entre comillas dobles, variable local o variable global.

Ejemplo:
• "menu"
• $variable_local
• [variable_global]
id_item No Define el ID del ítem creado. Este parámetro acepta texto fijo entre comillas dobles o variable.

Ejemplo:
• "item_01"
• "item_" . $array[0]
id_item_padre Debe especificarse solo si el ítem es un subelemento. En ese caso, utilice el ID del ítem padre.

Ejemplo:
• "item_01"
• "item_" . $array[0]
etiqueta No Recibe el nombre que se mostrará en el menú. Puede ser texto fijo, variable o una etiqueta de idioma (lang).

Ejemplo:
• "Nombre del Ítem"
• $nombreItem
• {lang_nombre_item}
nombre_aplicacion Condicional¹ Define la aplicación que se abrirá al hacer clic en el ítem. Puede dejarse en blanco si el ítem contiene subelementos.

¹ Puede dejarse en blanco si el ítem actúa como agrupador (ítem padre) sin acción de enlace.
parametros No Cadena de parámetros que se pasarán al activar el ítem. Deben recuperarse como variables globales.

Ejemplo:
• param1="valor";param2=$variable;param3={campo}
tooltip No Texto que se mostrará al pasar el ratón sobre el ítem. Puede ser texto fijo, variable o etiqueta lang.

Ejemplo:
• "Descripción del ítem"
• $descripcion
• {lang_descripcion}
icono No Define el ícono Font Awesome (o imagen) para el ítem del menú. Debe indicarse entre comillas dobles.

Ejemplo:
• "fa fa-user"
target No Define cómo se abrirá el enlace.

Ejemplo:
• "_self" – En la misma ventana
• "_blank" – En una nueva pestaña
• "_parent" – En el contexto de la ventana padre
megamenu No Define si el ítem se mostrará como un mega menú. Para que funcione correctamente:
– Debe ser un ítem de nivel superior (sin padre).
– Debe contener al menos dos niveles de subelementos.

Ejemplo:
• "S" – El ítem será mostrado como mega menú
• "" – El ítem será mostrado como menú estándar

 

Ejemplos

1. Menú fijo con valores directos

sc_appmenu_create("menu");

// Ítem principal fijo
sc_appmenu_add_item("menu", "item_0", "", "Inicio", "app_home", "", "fa fa-home", "Página de inicio", "_self", "");

// Grupo: Registros
sc_appmenu_add_item("menu", "item_1", "", "Registros", "", "", "fa fa-folder", "", "", "");
sc_appmenu_add_item("menu", "item_2", "item_1", "Clientes", "app_clientes", "", "fa fa-users", "", "_self", "");
sc_appmenu_add_item("menu", "item_3", "item_1", "Proveedores", "app_proveedores", "", "fa fa-truck", "", "_self", "");
sc_appmenu_add_item("menu", "item_4", "item_1", "Productos", "app_productos", "", "fa fa-box", "", "_self", "");

// Grupo: Informes
sc_appmenu_add_item("menu", "item_5", "", "Informes", "", "", "fa fa-file", "", "", "");
sc_appmenu_add_item("menu", "item_6", "item_5", "Facturación", "app_rel_facturacion", "", "fa fa-chart-line", "", "_self", "");
sc_appmenu_add_item("menu", "item_7", "item_5", "Inventario", "app_rel_inventario", "", "fa fa-warehouse", "", "_self", "");
sc_appmenu_add_item("menu", "item_8", "item_5", "Clientes", "app_rel_clientes", "", "fa fa-address-book", "", "_self", "");

2. Usando array y foreach

sc_appmenu_create("menu");

// Inicio
sc_appmenu_add_item("menu", "item_0", "", "Inicio", "app_home", "", "fa fa-home", "Página de inicio", "_self", "");

$grupos = array(
  array(
    "id"     => "item_1",
    "label"  => "Registros",
    "icono"  => "fa fa-folder",
    "items"  => array(
      array("label" => "Clientes",     "app" => "app_clientes",     "icono" => "fa fa-users"),
      array("label" => "Proveedores",  "app" => "app_proveedores",  "icono" => "fa fa-truck"),
      array("label" => "Productos",    "app" => "app_productos",    "icono" => "fa fa-box")
    )
  ),
  array(
    "id"     => "item_5",
    "label"  => "Informes",
    "icono"  => "fa fa-file",
    "items"  => array(
      array("label" => "Facturación", "app" => "app_rel_facturacion", "icono" => "fa fa-chart-line"),
      array("label" => "Inventario",  "app" => "app_rel_inventario",  "icono" => "fa fa-warehouse"),
      array("label" => "Clientes",    "app" => "app_rel_clientes",    "icono" => "fa fa-address-book")
    )
  )
);

$id_counter = 2;

foreach ($grupos as $grupo) {
  sc_appmenu_add_item("menu", $grupo["id"], "", $grupo["label"], "", "", $grupo["icono"], "", "", "");

  foreach ($grupo["items"] as $item) {
    $id = "item_" . $id_counter++;
    sc_appmenu_add_item("menu", $id, $grupo["id"], $item["label"], $item["app"], "", $item["icono"], "", "_self", "");
  }
}

3. Usando foreach con consulta en base de datos

sc_appmenu_create("menu");

// Inicio
sc_appmenu_add_item("menu", "item_0", "", "Inicio", "app_home", "", "fa fa-home", "Página de inicio", "_self", "");

// Consulta con JOIN
sc_lookup(menu_data, "
  SELECT
    g.id AS grupo_id,
    g.nombre AS grupo_nombre,
    i.id AS item_id,
    i.nombre AS item_nombre,
    i.app AS app,
    i.icono AS icono
  FROM grupos g
  JOIN items i ON i.grupo_id = g.id
  WHERE g.activo = 'S' AND i.activo = 'S'
  ORDER BY g.id, i.id
");

$grupos_creados = array();

if (isset({menu_data[0][0]})) {
  foreach ({menu_data} as $fila) {
    $grupo_id   = "item_" . $fila[0];
    $grupo_nombre = $fila[1];
    $item_id    = "item_" . $fila[2];
    $item_nombre  = $fila[3];
    $item_app   = $fila[4];
    $item_icono = $fila[5];

    if (!in_array($grupo_id, $grupos_creados)) {
      sc_appmenu_add_item("menu", $grupo_id, "", $grupo_nombre, "", "", "fa fa-folder", "", "", "");
      $grupos_creados[] = $grupo_id;
    }

    sc_appmenu_add_item("menu", $item_id, $grupo_id, $item_nombre, $item_app, "", $item_icono, "", "_self", "");
  }
}

4. Ejemplo con opción de mega menú

sc_appmenu_create("menu");

// Raíz del mega menú
sc_appmenu_add_item("menu", "item_0", "", "Gestión", "", "", "fa fa-sitemap", "", "", "S");

// Grupos del mega menú
$grupos = array(
  array(
    "id" => "item_1",
    "label" => "Registros",
    "items" => array("Clientes", "Productos", "Usuarios")
  ),
  array(
    "id" => "item_2",
    "label" => "Finanzas",
    "items" => array("Cuentas por pagar", "Ingresos", "Facturación")
  ),
  array(
    "id" => "item_3",
    "label" => "Informes",
    "items" => array("Ventas", "Inventario", "Clientes")
  )
);

$id_counter = 4;

foreach ($grupos as $grupo) {
  sc_appmenu_add_item("menu", $grupo["id"], "item_0", $grupo["label"], "", "", "", "", "", "");

  foreach ($grupo["items"] as $label) {
    $id = "item_" . $id_counter++;
    $app = "app_" . strtolower(str_replace(" ", "_", $label));
    sc_appmenu_add_item("menu", $id, $grupo["id"], $label, $app, "", "", "", "_self", "");
  }
}