Foros del Web » Programando para Internet » PHP »

enviar menu dinámico de una página a otra

Estas en el tema de enviar menu dinámico de una página a otra en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 28/06/2005, 03:50
 
Fecha de Ingreso: mayo-2005
Mensajes: 26
Antigüedad: 12 años, 6 meses
Puntos: 0
enviar menu dinámico de una página a otra

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?
  #2 (permalink)  
Antiguo 28/06/2005, 04:08
 
Fecha de Ingreso: junio-2005
Ubicación: Madrid, España
Mensajes: 288
Antigüedad: 12 años, 5 meses
Puntos: 1
no se si sera eso pero al array al registralo lo llamas menu y cuando llamas a la funcion listamenu le pasas una variable que se llama $menus, puede ser eso creo.
  #3 (permalink)  
Antiguo 28/06/2005, 04:26
 
Fecha de Ingreso: mayo-2005
Mensajes: 26
Antigüedad: 12 años, 6 meses
Puntos: 0
Cita:
Iniciado por zekenet
no se si sera eso pero al array al registralo lo llamas menu y cuando llamas a la funcion listamenu le pasas una variable que se llama $menus, puede ser eso creo.
Ese error viene de las multiples pruebas que llevo hecho, pero aunque lo corrija el problema persiste, ya que cuando llega a la función que imprime el menu la matriz $menu no existe y me da el error de
Código:
Warning: Invalid argument supplied for foreach() in c:\appserv\www\funcion.php on line
Tambien estoy interesado si existe otro método para hacer lo mismo, ya que me da la impresión que esto no es muy academico.
Gracias.
  #4 (permalink)  
Antiguo 28/06/2005, 04:49
 
Fecha de Ingreso: junio-2005
Ubicación: Madrid, España
Mensajes: 288
Antigüedad: 12 años, 5 meses
Puntos: 1
yo tengo echo algo similar, meto los datos en un array y despues para no ejecutar la consulta de nuevo ejecuto el array, lo unico que yo para mostrarlo lo hago de forma mas sencilla, lo hago con un while:
$i=0;
while($i<count($array_webs)){
?>
<tr>
<td><? echo $array_webs[$i][web] ?> </td>
<td><? echo $array_webs[$i][usu] ?> </td>
<td><? echo number_format($array_webs[$i][total], 2 , ',', '.') ?> </td>
<td><? echo number_format($array_webs[$i][target], 2 , ',', '.') ?> </td>
<td><? echo number_format($array_webs[$i][afin], 2 , ',', '.') ?> </td>
</tr>
<? $i++;
}
  #5 (permalink)  
Antiguo 28/06/2005, 04:54
 
Fecha de Ingreso: mayo-2005
Mensajes: 26
Antigüedad: 12 años, 6 meses
Puntos: 0
Cita:
Iniciado por zekenet
yo tengo echo algo similar, meto los datos en un array y despues para no ejecutar la consulta de nuevo ejecuto el array
Pero, como pasar el array de una página a otra?
  #6 (permalink)  
Antiguo 28/06/2005, 05:17
 
Fecha de Ingreso: junio-2005
Ubicación: Madrid, España
Mensajes: 288
Antigüedad: 12 años, 5 meses
Puntos: 1
con que registres el array, como ya haces, como variable de sesion con el session_register. No olvides que cuando cambies de página tienes que tener al principio de esa página session_start() porque sino perderas las variabales de sesion que hayas creado
  #7 (permalink)  
Antiguo 28/06/2005, 05:26
 
Fecha de Ingreso: mayo-2005
Mensajes: 26
Antigüedad: 12 años, 6 meses
Puntos: 0
Como puedes ver en el código que puse antes lo estoy haciendo así. Siembargo, parece como si no se registrase. Que puede ser?
  #8 (permalink)  
Antiguo 28/06/2005, 05:27
 
Fecha de Ingreso: junio-2005
Ubicación: Madrid, España
Mensajes: 288
Antigüedad: 12 años, 5 meses
Puntos: 1
has puesto session_start() al principio de cada una de las páginas en la que vas a usar la variable de sesion???
  #9 (permalink)  
Antiguo 28/06/2005, 06:11
 
Fecha de Ingreso: mayo-2005
Mensajes: 26
Antigüedad: 12 años, 6 meses
Puntos: 0
Cita:
Iniciado por zekenet
has puesto session_start() al principio de cada una de las páginas en la que vas a usar la variable de sesion???
Si, lo he puesto. Puedes verlo en el primer mnensaje.
  #10 (permalink)  
Antiguo 28/06/2005, 06:17
 
Fecha de Ingreso: junio-2005
Ubicación: Madrid, España
Mensajes: 288
Antigüedad: 12 años, 5 meses
Puntos: 1
ok, te comento una cosa que ya he visto que pasa varias veces, el session_start() debe estar lo primero en la página, no tiene que haber nada antes, es decir en tu caso tendria que estar antes que conectaDB(); y si tienes código antes de esto, tambien debe de estar por encima de todo el código, es decir al inicio de la página sin ni siquiera espacios entre medias. No me preguntes porque pero es asi, ya me paso alguna vez.
  #11 (permalink)  
Antiguo 28/06/2005, 07:17
 
Fecha de Ingreso: mayo-2005
Mensajes: 26
Antigüedad: 12 años, 6 meses
Puntos: 0
Código:
<?
session_start();
?>
<!doctype html public "-//W3C//DTD HTML 4.0 //Es">
<html>
<head>
       <title>Title here!</title>
<script type="text/javascript" src="/datepickercontrol/datepickercontrol.js"></script>
<SCRIPT LANGUAGE="JavaScript">
  function popUp(URL) {
    day = new Date();
    id = day.getTime();
    eval("page" + id + " = window.open(URL, '" + id + "', 'toolbar=1,scrollbars=1,location=1,statusbar=1,menubar=1,resizable=1,width=640,height=480,left = 312,top = 84');");}
</script>
<link type="text/css" rel="stylesheet" href="/css/po.css">
<link type="text/css" rel="stylesheet" href="/datepickercontrol/datepickercontrol.css">
</head>
<? include ("funcion.php");
   include ("FCKeditor/FCKeditor.php");
?>
<body>
<center>
<br>
<div id="container">
  <div id="cabeceira">
    <br><br><p class="c1" text-align="left">aaaaaaaaaaaaaaaaaaaaaa<BR>aaaaaaaaaaaaaaaaaaaaaa</p>
  </div>
  <table>
    <td width="650"><?  setlocale(LC_TIME,"spanish");echo strtoupper(strftime("%A, %d de %B de %Y")); ?></td>
    <td><A HREF="index.php" onMouseOver="return setImage('Portada','Over')" onMouseOut="return setImage('Portada','Norm')"><IMG NAME="Portada" SRC="/imaxes/casa.gif" WIDTH="17" HEIGHT="17" BORDER="0" ALT="" ALIGN="RIGHT"></A>
    <A HREF="/?1,101" onMouseOver="return setImage('Contacto','Over')" onMouseOut="return setImage('Contacto','Norm')"><IMG NAME="Contacto" SRC="/imaxes/contacto.gif" WIDTH="17" HEIGHT="17" BORDER="0" ALT="" ALIGN="RIGHT"></A></td>
  </table>
  <?
    conectaDB();
    if (!isset($_SESSION['menu'])) cargamenu();
	switch ($op) {
      case "ver":
        listamenu($menu,$op1,$op2);
        verhistoria($id);
        break;
      case "edita":
        editahistoria($id);
        break;
      case "graba":
        grabahistoria($id);
        break;
      default:
        listamenu($menu,$op1,$op2);
        cargahistorias($id);
	}
    pechaDB();
  ?>
</div>
</center>
</body>
</html>
Como ves, en principio está todo bien, sin embargo cada vez que se ejecuta este script se carga el menu, cuando solo debería cargarse si es la primera página (la primera vez que se ejecuta el script).
  #12 (permalink)  
Antiguo 28/06/2005, 09:12
 
Fecha de Ingreso: mayo-2005
Mensajes: 26
Antigüedad: 12 años, 6 meses
Puntos: 0
me autocontexto: el problema es que pareceser que con $_SESION no se puede utilizar el
sesion_register.
http://desaweb.forosdelweb.com/showt...ht=%24_SESSION
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:54.