![]() |
Documentación GVHIDRA 3.1.5
|
Ir al código fuente de este archivo.
Namespaces | |
namespace | igep |
Enumeraciones | |
enum | GVHIDRA_IMGMODULO |
enum | GVHIDRA_IMGRAMA |
enum | GVHIDRA_IMGOPCION |
enum | GVHIDRA_TRANSPARENCIA |
Funciones | |
comprobarAcceso ($nodoAControlar) | |
creaMenu ($ficheroXML) | |
desplegarNodo ($nodo, $tipoNodo, $datosPadre, &$menuTXT, &$menuHTML, $stringNivel) | |
construirMenuOpcion ($nodoOpcion, $datosPadre, &$menuTXT, &$menuHTML, $stringNivel) | |
smarty_function_CWPantallaEntrada ($params, &$smarty) |
enum GVHIDRA_IMGMODULO |
Definición en la lÃnea 33 del archivo function.CWPantallaEntrada.php.
enum GVHIDRA_IMGOPCION |
Definición en la lÃnea 35 del archivo function.CWPantallaEntrada.php.
enum GVHIDRA_IMGRAMA |
Definición en la lÃnea 34 del archivo function.CWPantallaEntrada.php.
Definición en la lÃnea 36 del archivo function.CWPantallaEntrada.php.
comprobarAcceso | ( | $ | nodoAControlar | ) |
La función siguiente recibe un nodo del árbol XML y comprueba si le corresponde acceso o no en función de la lista de módulos y roles del usuario activo (ubicado en la SESSION)
public
SimpleXML | $nodoControl | Nodo SimpleXML de los descritos en el fichero MenuModulos.xml |
Definición en la lÃnea 65 del archivo function.CWPantallaEntrada.php.
{ $retorno = true; //Valor por defecto //Si no hay nodos de control de acceso permiso concedido if (!isset($nodoAControlar->controlAcceso)) return($retorno); //Para cada posible nodo de control de acceso... foreach ($nodoAControlar->controlAcceso as $nodoControlAcceso) { $retorno = false; //Si hay nodos de ocntro lde acceso el valor por defecto es false //Tratamiento de roles foreach ($nodoControlAcceso->rolPermitido as $nodoRol) { $idModRol = trim(utf8_decode($nodoRol['valor'])); //Cogemos el atributo valor $sesionRol = trim(ComunSession::dameRol()); if ($sesionRol==$idModRol) return (true); //Permiso concedido!! } //Tratamiento de módulos de acceso $v_sesionModulos = IgepSession::dameModulos(); foreach ($nodoControlAcceso->moduloPermitido as $nodoModulo) //Para cada nodo moduloPermitido { $idNodoModulo = trim(utf8_decode($nodoModulo['id'])); if ($v_sesionModulos[$idNodoModulo]) //Si existe el módulo en la sesión { $numHijos = 0; foreach ($nodoModulo->valorModulo as $nodoValor) { $str_valorXML = trim(utf8_decode($nodoValor['valor'])); $str_valorSesion = trim($v_sesionModulos[$idNodoModulo]['valor']); if ($str_valorSesion == $str_valorXML) return (true); //Permiso concedido!! $numHijos++; }//fForeach //Si NO hay hijos basta con que aparezca en la sesión if ($numHijos == 0) return true; //Permiso concedido!! }//Fin if existe el módulo en la sesión }//fin para cada nodo moduloPermitido }//fin foreach return($retorno); }//Fin function comprobarAcceso
construirMenuOpcion | ( | $ | nodoOpcion, |
$ | datosPadre, | ||
&$ | menuTXT, | ||
&$ | menuHTML, | ||
$ | stringNivel | ||
) |
Genera la cadena del plugin MenuLayer y la parte del HTML correspondiente a un nodo hoja, 'opcion' Se le invoca desde el plugin public
SimpleXML | $nodoOpcion | Nodo SimpleXML del tipo opcion |
array | $datosPadre | Array asociativo con datos del nodo padre y el raíz |
string | $menuTXT | Cadena de texto que representa el menu de la aplicacion y sirve de entrada al pluggin MenuLAyer |
string | $menuHTML | Cadena HTML que contine las capas y el js para su control en el menu de la pantalla principal |
Definición en la lÃnea 385 del archivo function.CWPantallaEntrada.php.
{ if (!comprobarAcceso($nodoOpcion)) return; $titOpcion = utf8_decode($nodoOpcion['titulo']); $idOpcion = utf8_decode($nodoOpcion['id']); $descOpcion = utf8_decode($nodoOpcion['descripcion']); $url = utf8_decode($nodoOpcion['url']); $tipoUrl = utf8_decode($nodoOpcion['tipoUrl']); $abrirVentana = strtolower(trim(utf8_decode($nodoOpcion['abrirVentana']))); $imgOpcion = GVHIDRA_IMGOPCION; $modActv = $datosPadre['idRaiz']; if (isset($nodoOpcion['imagen']))//Si se especifica una imagen para la opción... $imgOpcion = utf8_decode($nodoOpcion['imagen']); $menuHTML.= "<img src='".IMG_PATH_CUSTOM.$imgOpcion."' title='$descOpcion' alt='-'/>"; if ($descOpcion == '') $title = ''; else $title = "title='".$descOpcion."'"; //Si se quiere sacar la ventana de Acerca de... if ($url =="about") { $menuHTML .= " <a class='formularios menu_modulos' href='#' onClick='javascript:about.mostrarAbout();' ".$title." target='oculto'>$titOpcion</a><br>\n"; } else { // Hay que abrir ventana emergente if ($abrirVentana=='true') { $urlTarget = '||_blank|'; $menuHTML.=" <a class='formularios menu_modulos' ".$title." href=\"javascript:Open_Vtna('$url','urlAbs',700,500,'no','no','no','no','yes','yes')\">$titOpcion</a><br/>\n"; } else { $urlTarget= "||oculto|"; $url.= "&modActv=".$datosPadre['modActv']."&menuActv=".$datosPadre['menuActv']; $menuHTML.=" <a class='formularios menu_modulos' href='$url' ".$title." target='oculto'>$titOpcion</a><br>\n"; } } $menuTXT.= "\n".$stringNivel.".|$titOpcion|$url|$descOpcion.$urlTarget\n"; }// Fin construirMenuOpcion
creaMenu | ( | $ | ficheroXML | ) |
El procedimiento encapsula a otra función recursiva, añadiéndo inicialización de variables. Genera la cadena del plugin MenuLayer private
string | $rutaFichero | Cadena que controla el nivel de profundidad en el arbol XML |
Definición en la lÃnea 116 del archivo function.CWPantallaEntrada.php.
{ //Activamos el log de errores libxml_use_internal_errors(true); if (file_exists($ficheroXML)) $simpleXML = simplexml_load_file($ficheroXML, SimpleXMLElement, LIBXML_DTDVALID); else //REVIEW: David Gestión Errores try/catch/throw exit('Error!!'); $v_errores = libxml_get_errors(); $i_numErrores = count($v_errores); if ($i_numErrores>0) { //REVIEW: David Gestión Errores try/catch/throw print_r($v_errores); exit('Error!!'); } $titColumna = strtolower(basename($ficheroXML, '.xml')); $prefColumna = 'X'; //Prefijo que incluira cada capa de cada columna switch($titColumna) { case 'menumodulos': $prefColumna = 'M'; $menuActv = 'menuMP'; break; case 'menuherramientas'; $prefColumna = 'H'; $menuActv = 'menuHA'; break; case 'menuadministracion'; $prefColumna = 'A'; $menuActv = 'menuAS'; break; } $idColumna = $prefColumna.md5($titColumna); $datosMenu = array ( 'menuActv' => $menuActv, 'modActv' => null, 'prefijo' => $prefColumna, 'idRaiz' => $idColumna, 'descRaiz' => $titColumna, 'idPadre' => $idColumna, 'descPadre' => $titColumna ); //Obtenemos TODOS los módulos $vMenu = $simpleXML->xpath('//menu'); $vSimpleXML = $simpleXML->xpath('//modulo'); $numModulos = count($vSimpleXML); // Cadenas para generar las capas con las opciones de los módulos $strCapasOpciones = ""; $vMenuModulosHTML = array(); $vMenuModulosTXT = array(); //Capa que encierra la lista de modulos $vMenuModulosHTML[$idColumna] = "<tr><td style='display:block; vertical-align:top;'>"; $vMenuModulosHTML[$idColumna].="\n<div id='$idColumna' class='menu'"; $vMenuModulosHTML[$idColumna].="style='display:block; "; $vMenuModulosHTML[$idColumna].=GVHIDRA_TRANSPARENCIA; $vMenuModulosHTML[$idColumna].="' >"; $stringNivel='.'; $menuModuloTXT =""; if ($numModulos > 1) { foreach ($simpleXML->modulo as $nodoModulo) //Para cada modulo... { if (!comprobarAcceso($nodoModulo)) continue; $descModulo = utf8_decode($nodoModulo['titulo']); $idModulo = $prefColumna.'M'.md5($idColumna.$descModulo); $datosMenu['modActv']=$idModulo; $menuModuloTXT =".|Menu||$descModulo"; $imgModulo = GVHIDRA_IMGMODULO; if (isset($nodoModulo['imagen']))//Si se especifica una imagen... $imgModulo = utf8_decode($nodoModulo['imagen']); $menuModulosHTML =''; $menuModulosHTML.= "<img src='".IMG_PATH_CUSTOM.$imgModulo."' alt='+' title='"; $menuModulosHTML.= $descModulo."' />"; $menuModulosHTML.="<b><a class='formularios menu_modulos' "; $menuModulosHTML.="href='javascript:mostrarOpciones(\"$idModulo\")'>"; $menuModulosHTML.="$descModulo</a></b><br/>"; desplegarNodo($nodoModulo, 'M', $datosMenu, $menuModuloTXT, $vMenuModulosHTML, $stringNivel); $vMenuModulosHTML[$idColumna].=$menuModulosHTML; $vMenuModulosTXT[$idModulo] = $menuModuloTXT; }//Fin para cada módulo $vMenuModulosHTML[$idColumna].="\n</div>"; } elseif ($numModulos == 1) // Un sólo módulo, simplificamos el primer nivel { $nodoModulo = $vSimpleXML[0]; if (!comprobarAcceso($nodoModulo)) return; $titModulo = utf8_decode($nodoModulo['titulo']); $descModulo = utf8_decode($nodoModulo['descripcion']); if (empty($descModulo)) $descModulo = $titModulo; $menuModuloTXT =".|Menu||$descModulo"; $idModulo = $idColumna; $datosMenu['modActv']=$idModulo; $datosMenu['idPadre'] = $idModulo; $datosMenu['descPadre'] = $descModulo; $datosMenu['idRaiz'] = $idModulo; foreach ($nodoModulo->children() as $nombre=>$hijo) //Para cada posible nodo... { $titHijo = utf8_decode($hijo['titulo']); $descHijo =utf8_decode($hijo['descripcion']); if (empty($descHijo)) $descHijo = $titHijo; $idNodoHijo = $datosMenu['prefijo'].'R'.md5($idNodo.$titHijo); $stringNivel='.'; if (strtolower(trim($nombre)) == 'rama') { $idHijo = $datosMenu['prefijo'].'R'.md5($idModulo.$titHijo); $imgHijo = GVHIDRA_IMGRAMA; if (isset($nodoHijo['imagen']))//Si se especifica una imagen... $imgHijo = utf8_decode($nodoHijo['imagen']); $vMenuModulosHTML[$idModulo].= "<img src='".IMG_PATH_CUSTOM.$imgHijo."' alt='+' title='"; $vMenuModulosHTML[$idModulo].= $descHijo. "' />"; $vMenuModulosHTML[$idModulo].="<b><a class='formularios menu_modulos' "; $vMenuModulosHTML[$idModulo].="href='javascript:mostrarOpciones(\"$idHijo\")'>"; $vMenuModulosHTML[$idModulo].="$titHijo</a></b><br/>"; $stringNivelRama = $stringNivel.'.'; desplegarNodo($hijo, 'R', $datosMenu, $menuModuloTXT, $vMenuModulosHTML, $stringNivelRama); } elseif (strtolower(trim($nombre)) == 'opcion') { $imgHijo = GVHIDRA_IMGOPCION; if (isset($nodoHijo['imagen']))//Si se especifica una imagen... $imgHijo = utf8_decode($nodoHijo['imagen']); construirMenuOpcion($hijo, $datosMenu, $menuModuloTXT, $vMenuModulosHTML[$idModulo], $stringNivel); }//Fin rama - opcion }//Fin para cada hijo $vMenuModulosHTML[$idModulo].= "\n</div>"; $ini_pantalla .= $strCapaModulo."</div>".$vHTML; $vMenuModulosTXT[$idModulo] = $menuModuloTXT; }//Fin if-else numero módulos $retorno['menuTXT'] = $vMenuModulosTXT; $retorno['html']=''; $numModulos = count($vMenuModulosHTML); reset($vMenuModulosHTML); for ($i=0; $i<$numModulos; $i++) { $retorno['html'] .= current($vMenuModulosHTML); next($vMenuModulosHTML); } $retorno['titulo'] = utf8_decode($vMenu[0]['titulo']); $retorno['idRaiz'] = $datosMenu['idRaiz']; //IgepDebug::setDebug(DEBUG_USER,'<pre>RETORNO: '.print_r($retorno,true).' FIN RETORNO</pre>'); return ($retorno); }//fFuncion creaMenu
desplegarNodo | ( | $ | nodo, |
$ | tipoNodo, | ||
$ | datosPadre, | ||
&$ | menuTXT, | ||
&$ | menuHTML, | ||
$ | stringNivel | ||
) |
Recorre el subarbol XMLgenera la cadena del plugin MenuLayer y la parte del HTML correspondiente al subarbol modulo/rama Se le invoca desde el plugin public
SimpleXML | $nodo | Nodo XML del tipo Rama de los descritos en el fichero MenuModulos.xml |
string | $tipoNodo | Cadena de texto que indica si es un módulo o una rama 'R'|'M' |
array | $datosPadre | Array asociativo con datos del nodo padre y el raíz |
string | $menuTXT | Cadena de texto que representa el menu de la aplicacion y sirve de entrada al pluggin MenuLAyer |
array | $menuHTML | Array asociativo que contendrá el código relativo a cada capa |
Definición en la lÃnea 301 del archivo function.CWPantallaEntrada.php.
{ if (!comprobarAcceso($nodo)) return; //Información Nodo $titNodo = utf8_decode($nodo['titulo']); $idNodo = $datosPadre['prefijo'].$tipoNodo.md5($datosPadre['idPadre'].$titNodo); $descNodo =utf8_decode($nodo['descripcion']); if (empty($descNodo)) $descNodo = $titNodo; //REVIEW: David - Constantes para imágenes if (strtolower($tipoNodo) =='R') $imgNodo=GVHIDRA_IMGRAMA; else //Módulo $imgNodo=GVHIDRA_IMGMODULO; if (isset($nodo['imagen']))//Si se especifica una imagen para la opción... $imgNodo = $nodo['imagen']; if ($tipoNodo!='M')//Los módulos NO generan MenuTxt { $menuTXT.= "\n$stringNivel|$titNodo||$descNodo|"; } else { $menuTXT.=''; } $aux_HTML=''; //Capa que envuelve el despliegue de la Nodo $aux_HTML.= "<div id='$idNodo' class='subMenu' style='display:none; "; $aux_HTML.=GVHIDRA_TRANSPARENCIA; $aux_HTML.="' >"; //Retorno al padre //REVIEW: Imágenes de retorno al padre distintas? $aux_HTML.= "<img src='".IMG_PATH_CUSTOM."menu/subir.gif' alt='^' title='"; $aux_HTML.= $datosPadre['descPadre']. "' />"; $aux_HTML.="<i><a class='formularios menu_modulos' href='javascript:mostrarOpciones(\""; $aux_HTML.=$datosPadre['idPadre']."\")'> Volver</a></i><br/>"; $datosPadre['idPadre']=$idNodo; $datosPadre['descPadre']=$descNodo; //Para cada nodo hijo... foreach ($nodo->children() as $nombre => $hijo) { if (strtolower(trim(utf8_decode($nombre))) == 'rama') { $titNodoHijo = utf8_decode($hijo['titulo']); $idNodoHijo = $datosPadre['prefijo'].'R'.md5($idNodo.$titNodoHijo); if (isset($hijo['imagen']))//Si se especifica una imagen para la rama... $imgNodoHijo = utf8_decode($hijo['imagen']); else $imgNodoHijo = GVHIDRA_IMGRAMA; $stringNivelRama=$stringNivel.'.'; $aux_HTML.= "<img src='".IMG_PATH_CUSTOM.$imgNodoHijo."' alt='++' title='"; $aux_HTML.= $titNodoHijo. "' />"; $aux_HTML.="<a class='formularios menu_modulos' href='javascript:mostrarOpciones(\""; $aux_HTML.=$idNodoHijo."\")'>".$titNodoHijo; $aux_HTML.="</a><br/>"; desplegarNodo($hijo, 'R', $datosPadre, $menuTXT, $menuHTML, $stringNivelRama); } elseif (strtolower(trim($nombre)) == 'opcion') { construirMenuOpcion($hijo, $datosPadre, $menuTXT, $aux_HTML, $stringNivel); } } $menuHTML[$idNodo]=$menuHTML[$idNodo].$aux_HTML.'</div>'; }//Fin desplegarNodo
smarty_function_CWPantallaEntrada | ( | $ | params, |
&$ | smarty | ||
) |
Construcción de la pantalla de acceso princiapl a la aplicación gvHidra
Definición en la lÃnea 441 del archivo function.CWPantallaEntrada.php.
{ $punteroPilaPadre = count($smarty->_tag_stack)-1; $CWPadre = $smarty->_tag_stack[$punteroPilaPadre][0]; if ($params['usuario']) { $usuario = $params['usuario']; } else { $usuario = ''; } if ($params['nomApl']) { $nomApl = $params['nomApl']; } else { $nomApl = ''; } if ($params['codApl']) { $codApl = $params['codApl']; } else { $codApl = ''; } if ($params['version']) { $versionApl = $params['version']; } else { $versionApl = ''; } if ($params['gvHidraVersion']) { $gvHidraVersion = $params['gvHidraVersion']; } else { $gvHidraVersion = ''; } $smarty->igepPlugin->registrarInclusionJS('pantallaInicio.js'); $smarty->igepPlugin->registrarInclusionJS('window.js'); $igepSmarty = new IgepSmarty(); $script .= "about.set('about','capaAbout','".$nomApl."','Versión ".$versionApl."','".$gvHidraVersion."');"; $igepSmarty->addPreScript($script); $ini_pantalla .= $igepSmarty->getPreScript(); $ini_pantalla .= "<table style='height: 100%; width: 100%;' cellpadding='0' cellspacing='0' border='0' class='fondo_inicio'>\n"; $ini_pantalla .= "<tr>\n"; $ini_pantalla .= "<td style='height: 14;' class='cabecerainicial'>\n"; $ini_pantalla .= "<table style='height: 100%; width: 100%; border-style:none;' cellpadding='0' cellspacing='0'>\n"; $ini_pantalla .= "<tr>\n"; $ini_pantalla .= "<td class='cabecerainicial'>".$usuario."</td>\n"; $ini_pantalla .= "<td align='left' style='width: 25;'>\n"; $ini_pantalla .= "<form style='display:inline' id='cerrar' name='cerrar' target='oculto' method='get' action='phrame.php'>\n"; $ini_pantalla .= "<input type='hidden' id='action' name='action' value='cerrarAplicacion'>"; $ini_pantalla .= "<input type='hidden' id='permitirCerrarAplicacion' name='permitirCerrarAplicacion' value='si' />\n"; $ini_pantalla .= "\t\t<input type='image' src='".IMG_PATH_CUSTOM."botones/28tr.gif' title='Cerrar' onClick='javascript:cerrarAplicacion(this.form);'> \n"; $ini_pantalla .= "</form>\n"; $ini_pantalla .= "</td>\n"; $ini_pantalla .= "</tr>\n"; $ini_pantalla .= "</table>\n"; $ini_pantalla .= "</td>\n"; $ini_pantalla .= "</tr>\n"; $ini_pantalla .= "<tr>\n"; $ini_pantalla .= "<td style='background-image: url(".IMG_PATH_CUSTOM."logos/logoSuperior.gif);' class='fondo_titaplic' align='center'>\n"; $ini_pantalla .= "<table>\n"; $ini_pantalla .= "<tr>\n"; $ini_pantalla .= "<td class='descrip_titaplic' align='center'>".$nomApl."</td>\n"; $ini_pantalla .= "</tr>\n"; $ini_pantalla .= "<tr>\n"; $ini_pantalla .= "<td class='titulo_aplicacion' align='center'>".$codApl."</td>\n"; $ini_pantalla .= "</tr>\n"; $ini_pantalla .= "<tr>\n"; $ini_pantalla .= "<td class='text' align='center'><b>Versión ".$versionApl."</b></td>\n"; $ini_pantalla .= "</tr>\n"; $ini_pantalla .= "</table>\n"; $ini_pantalla .= "</td>\n"; $ini_pantalla .= "</tr>\n"; $ini_pantalla .= "<tr>\n"; $ini_pantalla .= "<td align='center' style='height: 20; vertical-align:top; '>\n"; $ini_pantalla .= "<table style='height: 100%; width: 100%; border-style:none;' cellspacing='0' cellpadding='0'>\n"; $ini_pantalla .= "<tr>\n"; //Cabecera de cada columna $ini_columna = '<table '; $ini_columna.=" style='height: 100%; width: 80%; vertical-align:top;'"; $ini_columna.=" align='center' cellspacing='0' cellpadding='0' border='0'> \n"; $fin_columna ="\n</table>"; //Menú principal $vRetorno = creaMenu(MODXML_PATH.'menuModulos.xml'); //IgepDebug::setDebug(DEBUG_USER,print_r($vRetorno['idRaiz'],true)); IgepSession::guardaVariable ("global", "menuMP", $vRetorno['menuTXT']); $ini_menuModulos = ''; $ini_menuModulos.= $ini_columna.$vRetorno['html'].$fin_columna; $ini_menuModulos.= "</td>\n"; $ini_menuModulos.= "<td style='vertical-align:top;' >\n"; //Zona de inicio de cada columna $ini_zonaModulos = "<td class=\"cabecera_modulos\" align='center' style='width: 34%;' >"; $ini_zonaModulos.="<a class=\"cabecera_modulos\" href='javascript:mostrarOpciones(\""; $ini_zonaModulos.=$vRetorno['idRaiz']."\")'>"; if ($vRetorno['titulo'] == '') $ini_zonaModulos.= "Módulos principales"; else $ini_zonaModulos.= $vRetorno['titulo']; $ini_zonaModulos.="</a>"; $ini_zonaModulos.= " </td>\n"; //Menu herramientas $vRetorno = creaMenu(MODXML_PATH.'menuHerramientas.xml'); IgepSession::guardaVariable ("global", "menuHA", $vRetorno['menuTXT']); $ini_menuHerramientas =''; $ini_menuHerramientas.= $ini_columna.$vRetorno['html'].$fin_columna; $ini_menuHerramientas.= "</td>\n"; $ini_menuHerramientas.= "<td style='vertical-align:top;' >\n"; $ini_zonaModulos.= "<td class=\"cabecera_modulos\" align='center' style='width: 33%;' >"; $ini_zonaModulos.="<a class=\"cabecera_modulos\" href='javascript:mostrarOpciones(\""; $ini_zonaModulos.=$vRetorno['idRaiz']."\")'>"; if ($vRetorno['titulo'] == '') $ini_zonaModulos.= "Herramientas auxiliares"; else $ini_zonaModulos.= $vRetorno['titulo']; $ini_zonaModulos.="</a>"; $ini_zonaModulos.= " </td>\n"; //Menu administración $vRetorno = creaMenu(MODXML_PATH.'menuAdministracion.xml'); IgepSession::guardaVariable ("global", "menuAS", $vRetorno['menuTXT']); $ini_menuAdministracion =''; $ini_menuAdministracion.= $ini_columna.$vRetorno['html'].$fin_columna; $ini_menuAdministracion.= "</td>\n"; $ini_menuAdministracion.= "<td style='vertical-align:top;' >\n"; //Cabecera de la columna $ini_zonaModulos.= "<td class=\"cabecera_modulos\" align='center' style='width: 33%;' >"; $ini_zonaModulos.="<a class=\"cabecera_modulos\" href='javascript:mostrarOpciones(\""; $ini_zonaModulos.=$vRetorno['idRaiz']."\")'>"; if ($vRetorno['titulo'] == '') $ini_zonaModulos.="Administración sistema"; else $ini_zonaModulos.= $vRetorno['titulo']; $ini_zonaModulos.="</a>"; $ini_zonaModulos.= " </td>\n"; $ini_zonaModulos.= "<td class=\"cabecera_modulos\" align='center' style='width: 33%;' >"; //Concatenamos la zona de inicio de columnas $ini_pantalla .= $ini_zonaModulos; //Cerramos la zona de columnas $ini_pantalla.= "</tr>\n"; $ini_pantalla.= "<tr class=\"formularios menu_modulos\">\n"; $ini_pantalla.= "<td style='vertical-align:bottom;' >\n"; //Concatenamos los menus HTML de cada columna $ini_pantalla .= $ini_menuModulos.$ini_menuHerramientas.$ini_menuAdministracion; //Cierre de la pantalla $fin_pantalla = "</tr>\n"; $fin_pantalla .= "</table>\n"; $fin_pantalla .= "</td>\n"; $fin_pantalla .= "</tr>\n"; $fin_pantalla .= "<tr>\n"; $fin_pantalla .= "<td align='center' style='vertical-align:bottom;' >\n"; $fin_pantalla .= "<img src='".IMG_PATH_CUSTOM."logos/logo.gif' border='0'>\n"; $fin_pantalla .= "</td>\n"; $fin_pantalla .= "</tr>\n"; $fin_pantalla .= "</table>\n"; return $ini_pantalla.$fin_pantalla; }//Fin funcion