elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Crear menu con Categorias y SubCategorias usando MySQL y PHP
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Crear menu con Categorias y SubCategorias usando MySQL y PHP  (Leído 14,203 veces)
DeXon18

Desconectado Desconectado

Mensajes: 25


Ver Perfil
Crear menu con Categorias y SubCategorias usando MySQL y PHP
« en: 18 Mayo 2011, 12:25 pm »

Hola a todos, esta es la primera vez que posteo, les cuento que soy nuevo en php y mysql y me encuentro muy entretenido aprendiendo todos los dias algo nuevo, pero el tema en cuestion es que tengo un problema que no me ha dejado avanzar.

He tratado de desarrollar un sistema de categorias y subcategorias usando tablas relacionadas pero no lo he logrado, mi idea por el momento es generar un menu como este:

Categoria 1

    SubCategoria1

    SubCategoria2

    SubCategoria3

Categoria 2

    SubCategoria1

    SubCategoria2

    SubCategoria3

Categoria 3

    SubCategoria1

    SubCategoria2

    SubCategoria3


La estructura de las tablas que estoy usando es la siguiente:


Estructura de tabla para la tabla `categorias`

Código
  1. CREATE TABLE `categorias` (
  2. `categoria_id` INT(10) NOT NULL AUTO_INCREMENT,
  3. `categoria_nombre` VARCHAR(150) NOT NULL,
  4. PRIMARY KEY (`categoria_id`)
  5. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;

Estructura de tabla para la tabla `subcategorias`

Código
  1. CREATE TABLE `subcategorias` (
  2. `subcategoria_id` INT(10) NOT NULL AUTO_INCREMENT,
  3. `categoria_id` INT(10) NOT NULL,
  4. `subcategoria_nombre` VARCHAR(150) NOT NULL,
  5. PRIMARY KEY (`subcategoria_id`)
  6. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;
  7.  

Hasta el momento lo mejor que he logrado es generando la consulta de este modo, pero el resultado que me muestra no es el que yo quiero.

Categoria 1
Categoria 2
Categoria 5
Categoria 4

1
    SubCategoria1

    SubCategoria2

    SubCategoria3

2
    SubCategoria1

    SubCategoria2

    SubCategoria3

3
    SubCategoria1

    SubCategoria2

    SubCategoria3



Código
  1. <?php
  2. // Ejemplo de Conexion a base de datos
  3. $servidor ='localhost';
  4. $basedatos ='tutorial';
  5. $usuario_basedatos ='tutorial';
  6. $clave_basedatos ='XXXX';
  7.  
  8.  
  9. //Conectamos con el servidor
  10. $db=@mysql_connect($servidor,$usuario_basedatos,$clave_basedatos);
  11.  
  12. mysql_select_db($basedatos);
  13.  
  14.  
  15. $sqlQuery = mysql_query("SELECT categorias.*, subcategorias.* FROM categorias, subcategorias
  16.                         WHERE categorias.categoria_id = subcategorias.categoria_id
  17.                         ORDER BY subcategorias.subcategoria_id ASC", $db) or die(mysql_error());
  18.  
  19. $categoria = "";
  20. $categorias = array();
  21. $pos = 0;
  22.  
  23. while ($row = mysql_fetch_object($sqlQuery)){
  24.    if($categoria != $row -> categoria_id){
  25.        echo "<h3>".$row -> categoria_nombre."...</h3>";
  26.        $categoria = $row -> categoria_id;
  27.        $pos = array_push( $categorias,  array( $categoria, array() ) );
  28.    }    
  29.    $categorias[$pos][1][] = array($row->subcategoria_id, $row -> subcategoria_nombre);
  30.  
  31. }
  32.  
  33. foreach ($categorias as $categoria)
  34. {
  35.    if( !empty( $categoria[0] ) ) {
  36.           echo "<h1>" . $categoria[0] . "</h1>";
  37.    }
  38.    if (count($categoria[1]) > 0)
  39.    {
  40.        echo "<ul>";
  41.        foreach ($categoria[1] as $subCat)
  42.        {
  43.            echo "<li><a href='index.php?mod=categorias&amp;categoria_id=" . $subCat[0] . "'>" .
  44.                $subCat[1] . "</a></li>";
  45.        }
  46.        echo "</ul>";
  47.    }
  48. }  
  49. ?>


Pero no logro sacar como lo quiero, espero que me podáis ayudar.

Un saludo y gracias de nuevo


En línea

Diabliyo


Desconectado Desconectado

Mensajes: 1.441


shell# _


Ver Perfil WWW
Re: Crear menu con Categorias y SubCategorias usando MySQL y PHP
« Respuesta #1 en: 18 Mayo 2011, 14:52 pm »

Yo utilizaria una sola tabla:

Código:
create table MENUS(
ID VARCHAR(10) UNIQUE not NULL PRIMARY KEY,
NOMBRE VARCHAR(50) not NULL,
TIPO VARCHAR(1) not NULL,
MENU VARCHAR(10) not NULL );

La cosa es muy simple.... Cuando creas un menu, los datos se insertan asi:

# esto es un menu
Código:
ID = abcde123
NOMBRE = Inicio
TIPO = post|hoja|script|galeria
MENU = 0

# esto es un sub-menu de un menu principal
Código:
ID= otrocodigo
NOMBRE = Blog
TIPO = post|hoja|script|galeria
MENU = abcde123

Cuando existe un valor en la entrada MENU, quiere decir que es una sub-categoria o sub-menu, de lo contrario es solo un menu principal.

Saludos !


En línea

DeXon18

Desconectado Desconectado

Mensajes: 25


Ver Perfil
Re: Crear menu con Categorias y SubCategorias usando MySQL y PHP
« Respuesta #2 en: 18 Mayo 2011, 15:26 pm »

Interesante no lo había visto de esa forma, la cosa es que si quisiera hacerlo con un 3º nivel?

como seria? (inicialmente era de 3 niveles pero me resultaba y lo deje en 2

Un saludo y gracias ;)
En línea

merolhack

Desconectado Desconectado

Mensajes: 278

Me encanta Joomla y lo que puedo hacer con el


Ver Perfil WWW
Re: Crear menu con Categorias y SubCategorias usando MySQL y PHP
« Respuesta #3 en: 18 Mayo 2011, 18:32 pm »

Pues lo ideal es que hagas 2 querys, uno para obtener todos los items de menú de primer nivel y otro query para obtener los de segundo nivel. Los resultados los almacenas en 1 array y recorres todo con un for tipo:

Código:
<?php
$items_1_nivel = array(
0 => array(
'id' => 1,
'name' => 'Item1'
),
1 => array(
'id' => 2,
'name' => 'Item2'
)
);
$items_2_nivel = array(
0 => array(
'id' => 1,
'name' => 'SubItem1',
'parent' => '1'
),
1 => array(
'id' => 2,
'name' => 'SubItem2',
'parent' => '1'
),
2 => array(
'id' => 3,
'name' => 'SubItem3',
'parent' => '2'
),
3 => array(
'id' => 4,
'name' => 'SubItem4',
'parent' => '2'
)
);
foreach( $items_1_nivel as $item1 ) {
$hijos = NULL;
$list .= "<li>" . $item1['name'];
foreach( $items_2_nivel as $item2 ) {
if ( $item2['parent'] == $item1['id'] ) {
$hijos .= "<li>".$item2['name']."</li>";
}
}
if ( isset( $hijos ) && $hijos != NULL ) {
$list .= "<ul>".$hijos."</ul>";
}
$list .= "</li>";
}
echo "<ul>".$list."</ul>";
?>
En línea

PHP Web Developer
Joomla, jQuery, MySQL, CSS, etc...

Android APP Developer http://android-dev.tumblr.com/
Kasi

Desconectado Desconectado

Mensajes: 76



Ver Perfil
Re: Crear menu con Categorias y SubCategorias usando MySQL y PHP
« Respuesta #4 en: 21 Mayo 2011, 15:13 pm »

Para hacerlo con 3 niveles o los niveles que te hagan falta es igual que para hacerlo con 2 en el ejemplo que te puso Diabliyo.

Código:
ID = Nivel_1
NOMBRE = Inicio
TIPO = post|hoja|script|galeria
MENU = 0
Código:
ID = Nivel_2
NOMBRE = Otro nombre
TIPO = post|hoja|script|galeria
MENU = Nivel_1
Código:
ID = Nivel_3
NOMBRE = Otro nombre mas
TIPO = post|hoja|script|galeria
MENU = Nivel_2
Y asi sucesivamente, solo tienes que referenciar de que menú cuelga el siguiente elemento y ya está.

Un saludo
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[SOLUCIONADO][Modelo Entidad-Relación] Documentos, categorias y subcategorias
Bases de Datos
Kasi 2 8,735 Último mensaje 16 Junio 2010, 20:01 pm
por Kasi
Crear tabla usando como nombre el campo de otra MYSQL [Solucionado]
Bases de Datos
Graphixx 1 4,250 Último mensaje 1 Diciembre 2010, 06:48 am
por Graphixx
Menú categorías en las busquedas de buscadores
Desarrollo Web
gregory90 1 2,043 Último mensaje 27 Abril 2011, 04:53 am
por merolhack
[SRC] Menú básico usando switch
Java
madpitbull_99 2 4,432 Último mensaje 15 Octubre 2011, 12:55 pm
por тαптяα
Crear categorias en un XML
PHP
JmGarciaYT 1 1,527 Último mensaje 25 Julio 2019, 15:21 pm
por mchojrin
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines