menu dinamico

ocarlos
23 de Octubre del 2002
Hola, por favor necesito saber como puedo crear un menu dinamico, osea que muestre opciones personalizadas a cada tipo de usuario de un programa que funciona con base de datos postgresql.

armando
23 de Octubre del 2002
EL que yo hice no es el mas perfecto pero funciona
consegui un javascript de dos archivos uno donde estan los parametros de construccion del menu y el otro donde se encuentra las funciones que lo que generan

el trabajo lo realizas en el archivo de los parametros utilizo tres tablas modulos, opciones, accesos

en modulos almacenos los menus generales y submodulos

en la tabla opciones relaciono las opciones a un modulo y utilizo la opcion como puente de union con los submodulos de esta forma consigo un sistema de menus bastante complejo con submenus

el vedadero rollo se encuentra en la fabricacion de los parametros del menu puedes tomar esto de referencia

/////////////////////////////// PRIMERA CAPA DE SEGURIDAD ////////////////////////////////
/************************* SEGURIDAD BASADA EN SESSION DE PHP ***************************/

session_register("SEGURIDAD");
session_register("USUARIO");

/* seguridad acceso directo a la pagina sin logear */
if($SEGURIDAD["usuario"] == "" && $SEGURIDAD["session_php"] == "")
{
header("Location: index.php");
}

///////////////////////////////// SEGUNDA CAPA DE SEGURIDAD ///////////////////////////////
/********************* SEGURIDAD DE USUARIO BASADA EN LA BASE DE DATOS *******************/

/* incluciones de librerias */
include "./librerias/db.inc";
include "./librerias/estandar.inc";

/* variables globales de la pagina */
$global_titulo_pagina ="INGRESO AL SISTEMA";

/* funciones globales de la pagina */

/* Codigo de la pagina */

$con = new mssql();
@$con->mssql2("",$SEGURIDAD["usuario"],$SEGURIDAD["clave"]);

////////////////////////////////// TERCERA CAPA DE SEGURIDAD //////////////////////////////
/*************************** OPCIONES ASIGNADAS POR LA APLICACION ************************/


/* Consulta de los modulos o grupos de opciones*/
$consulta_modulos = "
SELECT a.descripcion,
a.id_modulo,
a.tipo_modulo
FROM t00_modulos a,
t00_opciones b
WHERE b.id_modulo = a.id_modulo
GROUP BY a.descripcion,
a.id_modulo,
a.tipo_modulo
ORDER BY 3 asc";


//consulta modulos o grupos de opciones
@$con->consulta($consulta_modulos);


//Siclo para fabricar modulos o grupos del menu
$acumulador = 2;
while($con->siguiente())
{
//sentencia que filtra los modulos de los grupos de opciones
if ($con->campo(2) == 1)
{
/*$construccion_cadena_modulos .= """ . $con->campo(0) . "","show-menu" . $acumulador . "",,"#",1,n" ;*/
}
else
{
$construccion_cadena_modulos .= """ . $con->campo(0) . "","show-menu" . $acumulador . "",,"#",1,n" ;
}

//Arreglo con informacion de los modulos o grupos de opciones del menu
$arreglo_indices_modulos[] = $acumulador;
$arreglo_indices_nuevo[] = $con->campo(1);
$valor = $con->campo(1);
$arreglo_submodulo[] = $con->campo(2);
$arreglon["$valor"] = $acumulador;
$acumulador +=1;
}
//longitud de la cadena modulos del sistema
$longitud_cadena_modulos = strlen($construccion_cadena_modulos);

//eliminar coma final de la cadena
$cadena_modulos = substr($construccion_cadena_modulos,0,$longiud_cadena_modulos - 2 )."n]" ;


//OPCIONES POR MODULO

//cantidad de indices en el arreglo
$cantidad_indices_modulos = count ($arreglo_indices_modulos);

//inicializar variable temporal
$temp = "";

//Cadena respuesta opciones por modulo
$cadena_total_opciones;

//siclo para obtener opciones por modulo
for ($i = 0; $i < $cantidad_indices_modulos; $i++)
{

//indice de modulo
$modulo_destinado = $arreglo_indices_modulos[$i];
$modulo_real = $arreglo_indices_nuevo[$i];
$submodulo = $arreglo_submodulo[$i];

//Consulta de opcines uniones de menu
$consulta_opciones_modulo = "
SELECT id_opcion,
id_modulo,
descripcion,
pagina
FROM t00_opciones
WHERE id_modulo = $modulo_real";


//genera la consulta
@$con->consulta($consulta_opciones_modulo);

//modulo
$inicio_arreglo = "
menu" . $modulo_destinado . "=[
,,175,1,"",prop1,,"",effect,,,,,,,n";

$cadena_total_opciones .= $inicio_arreglo;


//inicializar variable temporal
$constructor_temp = "";

//Construccion cadena opciones por modulo ocifetch($analizar_opciones_modulo)
while($con->siguiente())
{
/*$busca = ociresult($analizar_opciones_modulo,4); ociresult($analizar_opciones_modulo,3)*/
$busca = $con->campo(3);
$constructor_temp .= """. $con->campo(2) . "","". ($busca > 0 ? "show-menu".$arreglon["$busca"] : $busca ) ."",,,1,n";
}

$longitud = strlen(trim($constructor_temp));
$cadena_total_opciones .= substr(trim($constructor_temp),0,$longiud - 1 ) . "n ]";


}


//Cadena con estructuras parametros del menu javascript
$menu = "
<SCRIPT language=JavaScript>
timegap=500
followspeed=2
followrate=40
suboffset_top=10;
suboffset_left=10;

//effect = "fade(duration=0.3);Shadow(color='#777777', Direction=135, Strength=5)"
effect = ""

//Funcion para abrir una ventana con el contenido del link
function openwin(url)
{
nwin=window.open(url, "nwin",config="scrollbars=yes,resizable=yes,toolbar=no,location=no,status=no,menubar=no,");
nwin.focus();
}

prop1=[ // prop1 es una arreglo con las propiedades del menu
"000000", // Off Font Color
"AAB2AA", // Off Back Color
"000000", // On Font Color
"E6E6E6", // On Back Color
"000000", // Border Color
9, // Font Size
"normal", // Font Style
"normal", // Font Weight
"Verdana,Tahoma,Helvetica", // Font
0, // Padding
"arrow.gif", // Sub Menu Image
0, // 3D Border & Separator
"000000", // 3D High Color
"E6E6E6", // 3D Low Color
"000000", // Referer item Font Color (leave this blank to disable)
"E6E6E6", // Referer item Back Color (leave this blank to disable)
]


menu1=[ // This is the array that contains your menu properties and details
75, // Top
0, // left
, // Width
1, // Border Width
"left", // Screen Position - here you can use "center;middle;right"
prop1, // Properties Array - this is set higher up, as above
1, // Always Visible - allows the menu item to be visible at all time
"center", // Alignment - sets the menu elements alignment, HTML values are valid here for example: left, right or center
, // Filter - Text variable for setting transitional effects on menu activation
, // Follow Scrolling - Tells the menu item to follow the user down the screen
1, // Horizontal Menu - Tells the menu to be horizontal instead of top to bottom style
1, // Keep Alive - Keeps the menu visible until the user moves over another menu or clicks elsewhere on the page
, // Position of sub image left:center:right:middle:top:bottom
, // Show an image on top menu bars indicating a sub menu exists below
, // Reserved for future use
" . $cadena_modulos .
"

n".

$cadena_total_opciones

."n
</SCRIPT>
<SCRIPT language=JavaScript src="mmenu.js" type=text/javascript></SCRIPT>
";