Foros del Web » Programando para Internet » PHP »

Menu con php

Estas en el tema de Menu con php en el foro de PHP en Foros del Web. Hola, estoy haciendo un archivo menu.php para incluir en una web... este archivo genera un menu con los enlaces a la web, luego con css ...
  #1 (permalink)  
Antiguo 27/02/2008, 22:07
 
Fecha de Ingreso: julio-2006
Mensajes: 25
Antigüedad: 17 años, 9 meses
Puntos: 1
Menu con php

Hola, estoy haciendo un archivo menu.php para incluir en una web... este archivo genera un menu con los enlaces a la web, luego con css me encargo del resto...

el tema es que quiero resaltar el enlace al que corresponde la página que carga ese menu...

Código PHP:
<?php

$menu 
= Array(
"Inicio" => "index.php",
"enlace 2" => "algo.php",
"enlace 3" => "otra_cosa.php",
"Titulo subcategoria" => Array
        (
    
"subenlace 1" => "sub1.php",
    
"subenlace 2" => "sub2.php",
    ),
"Hazte Socio" => "socio.php",
"Contactar" => "contacto.php",
"Foro"=>"foro.php"
);


if(
$menu)

    echo 
"<ul>\n";
    foreach(
$menu as $title => $url)
    {
        if(!
is_array($url))
        {
                        echo 
"<li><a href=\"$url\">$title</a></li>\n";
        }
        else
        {
            echo 
"<li>$title</li>\n";
            echo 
"<li class=\"submenu\">\n<ul>\n";

            foreach(
$url as $sub_title => $sub_url)
            {
                echo 
"<li><a href=\"$sub_url\">$sub_title</a></li>\n";
            }

            echo 
"</ul>\n</li>\n";
        }
    }
    echo 
"</ul>\n";
}
?>
Esto me genera el menú tal como yo lo quiero, así puedo modificar mi array de elementos del menú.

El tema es que no se me ocurre como hacer que "se dé cuenta" cuando no tiene que poner enlace y cambie a por ejemplo:
<li class="current">Estoy aquí</li>

se me ocurrio incluir en cada página enlazada una variable $titulo, para comparar con el $title o $sub_title, pero me resulta poco práctico a mi parecer...

Lo que también me parece más "correcto" es comparar la url en el navegador, y la que pone en $url y $sub_url, pero si paso parametros por la url, no sé como sería.. xD

Fijo que alguién lo ha echo y quiera compartir su método conmigo.

Gracias :)
  #2 (permalink)  
Antiguo 27/02/2008, 22:48
okram
Invitado
 
Mensajes: n/a
Puntos:
Re: Menu con php

Revisa el manual de PHP para la función basename()

Esta función te devuelve el nombre de la página actual. Lo que debes hacer es comparar el nombre de la página actual con el link de cada enlace, y si coinciden es que está en esa sección:

Código PHP:
$esta_pagina basename(__FILE__);
 
if(!
is_array($url)) 

    echo 
"<li";
    if(
$esta_pagina == $url
    {
        
# Es la página actual, por lo que aplicamos la clase
        
echo " class=\"current\"";
    }
    echo 
"><a href=\"$url\">$title</a></li>\n"

else 

    echo 
"<li>$title</li>\n"
    echo 
"<li class=\"submenu\">\n<ul>\n"

    foreach(
$url as $sub_title => $sub_url
    { 
        echo 
"<li";
        if(
$esta_pagina == $url
        {
            
# Es la página actual, por lo que aplicamos la clase
            
echo " class=\"current\"";
        }
        echo 
"><a href=\"$sub_url\">$sub_title</a></li>\n"
    } 

    echo 
"</ul>\n</li>\n"

Un saludo,
  #3 (permalink)  
Antiguo 27/02/2008, 22:59
 
Fecha de Ingreso: julio-2006
Mensajes: 25
Antigüedad: 17 años, 9 meses
Puntos: 1
Re: Menu con php

Muchas gracias

sólo tuve que modificar el basename(__File__) --> que me hace referencia al archivo menu.php

al final quedó en $pagina_actual = basename($_SERVER['SCRIPT_NAME']); que si hace referencia al archivo que ve el navegador.

:)
  #4 (permalink)  
Antiguo 27/02/2008, 23:07
okram
Invitado
 
Mensajes: n/a
Puntos:
Re: Menu con php

Yo te sugeriría reemplazar ese bloque if($menu) {...} por una función recursiva, de tal manera que te permita incluir más niveles de submenúes y no tengas que repetir el código para imprimir links 2 veces

Código PHP:
$menu = array( 
    
"Inicio" => "index.php"
    
"enlace 2" => "algo.php"
    
"enlace 3" => "otra_cosa.php"
    
"Titulo subcategoria" => array( 
        
"subenlace 1" => "sub1.php"
        
"subenlace 2" => "sub2.php"
    ), 
    
"Hazte Socio" => "socio.php"
    
"Contactar" => "contacto.php"
    
"Foro"=>"foro.php" 
); 
 
function 
menu($menu) {
    
$str "<ul>\n"
    
$esta_pagina basename($_SERVER['SCRIPT_NAME']);
    foreach(
$menu as $title=>$url
    { 
        if(!
is_array($url)) 
        { 
            
$str.= "<li";
            if(
$esta_pagina == $url
            {
                
# Es la página actual, por lo que aplicamos la clase
                
$str.= " class=\"current\"";
            }
            
$str.= "><a href=\"$url\">$title</a></li>\n"
        } 
        else 
        { 
            
$str.= "<li>$title</li>\n"
            
$str.= "<li class=\"submenu\">\n"
            
$str.= menu($url); 
            
$str.= "</li>\n"
        } 
    } 
    
$str.= "</ul>\n"
    return 
$str;
}
 
echo 
menu($menu); 
En fin... es lo mismo.

Un saludo,
  #5 (permalink)  
Antiguo 27/02/2008, 23:14
 
Fecha de Ingreso: julio-2006
Mensajes: 25
Antigüedad: 17 años, 9 meses
Puntos: 1
Re: Menu con php

Pues sip, esa es la mejora que tendría que hacerle, así se pueden incluir más subniveles, en este caso solo con uno bastaria, además del ahorro de líneas :)

Gracias por el dato

Saludos ;)
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 09:27.