Tengo un menu dinámico almacenado enuna base de datos, cuando entro la primera vez lo leo de la base de datos, lo almaceno en una matriz y desde alli lo imprimo en cada página.
Lo que trato de evitar es ir a la base de datos a cargar el menu cada vez que me muevo por la web, me parece un abuso. El problema que me encuentro es como envio la matriz de una página a otra. Lo he intentando con $_SESSION pero no acaba de funcionarme. Lo hago así:
Funcion que carga el menu desde la base de datos:
Código:
function cargamenu() {
global $db;
$query='select * from TEMAS order by TEM_NIVEL1,TEM_NIVEL2,TEM_NIVEL3,TEM_CODIGO';
$result = mysql_query($query);
if (!$result) die('Error Cargando Opciones de Menu:' . mysql_error());
$i=0;
unset($menu);
$menu=array();
while($temas = mysql_fetch_array($result)){
$menu[$i]['TEM_CODIGO']=$temas['TEM_CODIGO'];
$menu[$i]['TEM_NIVEL1']=$temas['TEM_NIVEL1'];
$menu[$i]['TEM_NIVEL2']=$temas['TEM_NIVEL2'];
$menu[$i]['TEM_NIVEL3']=$temas['TEM_NIVEL3'];
$menu[$i]['TEM_DESCRIP']=$temas['TEM_DESCRIP'];
$menu[$i]['TEM_ENLACE']=$temas['TEM_ENLACE'];
$menu[$i]['TEM_PAI']=$temas['TEM_PAI'];
$i++;
}
$op1=0;
$op2=0;
session_register('menu','op1','op2'); }
Función que lista el menu:
Código:
function listamenu($menu,$id1,$id2) {
echo '<div id="barra-menu">';
echo '<div id="menu">';
reset ($menu);
foreach($menu as $i => $filaval) {
echo '<p>'.$menu[$i]['TEM_DESCRIP'];
if ($menu[$i]['TEM_NIVEL2']<1){
echo '<a class="m1" href ="index.php?op=&id='.$menu[$i]["TEM_CODIGO"].'&pai='.$menu[$i]["TEM_CODIGO"].'">'.$menu[$i]["TEM_DESCRIP"].'</a><br>';}
else if ($menu[$i]['TEM_PAI']==1) {
if (trim($menu[$i]["TEM_ENLACE"])!='') {
echo '<A class="m2" HREF="javascript:popUp(\''.$menu[$i]["TEM_ENLACE"].'\')">'.$menu[$i]["TEM_DESCRIP"].'</A><br>';}
else {
echo '<a class="m2" href ="index.php?op=&id='.$menu[$i]["TEM_CODIGO"].'&pai='.$menu[$i]["TEM_PAI"].'">'.$menu[$i]["TEM_DESCRIP"].'</a><br>';}
}
}
}
Entrada del script:
Código:
conectaDB();
session_start();
if (!session_is_registered('menu')) cargamenu();
listamenu($menus,$op1,$op2);
Alguien puede decirme en que me estoy equivocando o si existe alguna alternativa mejor?