Menú Con PHP y MySQL
Menú Con PHP y MySQL
Necesitas una host si no tenes, con este programa podés tener tu propio localhost.
Se dirigen a la carpeta donde lo instalaron: (en mi caso disco C) C:/xampp/htdocs y creamos una
carpeta para luego ir a nuestro navegador y poder entrar con
http://localhost/nuestranombrecarpeta
Donde no tendrán nada todavía, obviamente.
Hacemos click en base de datos (arriba en el menú) y ponemos el nombre a nuestra db, por ahora:
miweb.
Lo que está la costado, llamado cotejamiento esta en lenguaje español para que permita subir
informacion a la base de datos como ñ tildes, etc.
Nos dirigimos a la sección SQL para crear una tabla y ponemos lo siguiente:
Eso fue con respecto al menu, ahora vamos con los listados del mismo
ID: identificador del submenu.
Nombre: titulo del submenu
Menu_id: menu al que pertenece (usando ID: identificador)
Cont_item: para contar la cantidad de publicaciones vinculadas a el. (Opcional)
MYSQL.PHP
Nos conectaremos a la base de datos:
<?php
$bd_host = "localhost"; //localhost XD
$bd_usuario = "root"; //usuario
$bd_password = ""; //contraseña
$bd_base = "miweb"; //Nombre de la db
$con = mysql_connect($bd_host, $bd_usuario, $bd_password);
mysql_select_db($bd_base, $con);
?>
MENU.PHP
<div id="menu">
<?php
include("mysql.php"); //Incluimos los datos de la conexion de base de datos
$menu_sql = mysql_query("SELECT id,nombre FROM menu"); //Selecciona los titulos del menu
while($menu = mysql_fetch_row($menu_sql)) //Entregara los datos en forma de $menu[numero], empezando
con el 0
{ //Repetira el siguiente echo con todos los datos de la consulta
echo ' <ul>
<li>
<a href="'.$menu[0].'">'.$menu[1].'</a>'; //Se usa el '. .' para "pausar" el echo y mostrar una variable
acompañada siempre por puntos.
$submenu_sql = mysql_query("SELECT id,nombre,menu_id,cont_item FROM submenu WHERE menu_id = '"
.$menu[0]."'"); //Selecciona los subsmenu con la condición de mostrar en el menu que corresponda (Por id)
if(mysql_num_rows($submenu_sql) > 0) //Si la cantidad de filas que muestra la consulta es mayor a 0 imprimir
ia lo siguiente ( echo )
{
echo '
<div>
<ul>';
while($submenu = mysql_fetch_row($submenu_sql))
{
echo '
<li><a href="'.$submenu[0].'">'.$submenu[1].' ('.$submenu[3].')</a></li>';
}
mysql_free_result($submenu_sql); //Liberamos memoria para no saturar el servidor, si es muy visitado, pero s
iempre es mejor tomar precauciones :)
echo '
</ul>
</div>';
}
echo '
</li>
</ul>
';
}
mysql_free_result($menu_sql); //Aqui tambien liberamos la memoria en la consulta del menu
mysql_close(); //Cerramos la conexion a la db
?>
</div>
EXPLICACIÓN GENERAL:
Hemos tomado los nombres de los menus y las listas directamente de nuestra base de datos,
habilitando el <div> si este menu tenía alguna lista.
Y... de yapa:
STYLE.CSS
#menu {
background: #585858;
border-bottom: 1px solid #000000;
height: 37px;
margin-bottom: 15px;
-webkit-border-radius: 5px 5px 5px 5px;
-moz-border-radius: 5px 5px 5px 5px;
-khtml-border-radius: 5px 5px 5px 5px;
border-radius: 5px 5px 5px 5px;
-webkit-box-shadow: 0px 2px 2px #DDDDDD;
-moz-box-shadow: 0px 2px 2px #DDDDDD;
box-shadow: 0px 2px 2px #DDDDDD;
padding: 0px 5px;
}
#menu ul {
list-style: none;
margin: 0;
padding: 0;
}
#menu > ul > li {
position: relative;
float: left;
z-index: 20;
padding: 6px 5px 5px 0px;
}
#menu > ul > li:hover {
}
#menu > ul > li > a {
font-size: 13px;
color: #FFF;
line-height: 14px;
text-decoration: none;
display: block;
padding: 6px 10px 6px 10px;
margin-bottom: 5px;
z-index: 6;
position: relative;
}
#menu > ul > li:hover > a {
background: #000000;
}
#menu > ul > li> div {
display: none;
position: absolute;
z-index: 5;
padding: 5px;
border: 1px solid #000000;
-webkit-border-radius: 0px 0px 5px 5px;
-moz-border-radius: 0px 0px 5px 5px;
-khtml-border-radius: 0px 0px 5px 5px;
border-radius: 0px 0px 5px 5px;
background: url('../img/menu.png');
}
#menu > ul > li:hover > div {
display: table;
}
#menu > ul > li > div > ul {
display: table-cell;
}
#menu > ul > li ul + ul {
padding-left: 20px;
}
#menu > ul > li ul > li > a {
text-decoration: none;
padding: 4px;
color: #FFFFFF;
display: block;
white-space: nowrap;
min-width: 120px;
}
#menu > ul > li ul > li > a:hover {
background: #000000;
}
#menu > ul > li > div > ul > li > a {
color: #FFFFFF;
}