Foros del Web » Programando para Internet » PHP »

Listar subcategorias

Estas en el tema de Listar subcategorias en el foro de PHP en Foros del Web. Hola Foro recurro a ustedes despues de haber probado todo que que se (que no es mucho por cierto) revisé las faqs, probé probé y ...
  #1 (permalink)  
Antiguo 20/10/2009, 17:39
 
Fecha de Ingreso: febrero-2004
Mensajes: 134
Antigüedad: 20 años, 2 meses
Puntos: 0
Listar subcategorias

Hola Foro recurro a ustedes despues de haber probado todo que que se (que no es mucho por cierto) revisé las faqs, probé probé y probé.
resulta que tengo estas dos tablas...

CATEGORIAS

categorias_productos` (
`id_categoria` int(11) NOT NULL auto_increment,
`nombre_categoria` varchar(255) NOT NULL default '',
`id_categoria_padre` int(11) NOT NULL default '0',
PRIMARY KEY (`id_categoria`)
) ;

PRODUCTOS

`productos` (
`id_producto` int(11) NOT NULL auto_increment,
`nombre_producto` varchar(255) NOT NULL default '',
`id_categoria` int(11) NOT NULL default '0',
PRIMARY KEY (`id_producto`),
KEY `id_categoria` (`id_categoria`)
)

todo muy bien entendí o de categorias y subcategorias... de hecho...

Código PHP:
<?php
function generate_menu2($id_padre)
        {
$conexion=mysql_connect("localhost","","") or  die("Problemas en la conexion");
         
mysql_select_db("",$conexion) or  die("Problemas en la selecci&oacute;n de la base de datos");
         
         
$query=mysql_query("SELECT * FROM categorias_productos ",$conexion);
         
mysql_close($conexion);
         
            while ( 
$row mysql_fetch_assoc($query) )
                {
$menu_array[$row["id_categoria"]] = array("id_categoria" => $row["id_categoria"],"nombre_categoria" => $row["nombre_categoria"],"id_categoria_padre" => $row["id_categoria_padre"]);
                }
            foreach(
$menu_array as $key => $value)
                {if (
$value["id_categoria_padre"] == $id_padre
                        {   
                        if(
$id_padre == 0)
                        
                            {echo 
"<li><a href='#'>".$value['nombre_categoria']."</a></li>";
                             
generate_menu2($key);
                            }
                          
                        else 
                            {echo 
"<li class='tab'><a href='#'>"$value['nombre_categoria']."</a></li>";
                             
generate_menu2($key);
                            }
                        
                        
                            
                        }
                }
    }
?>



<?php generate_menu2(0);?>

O sea que solo logro listar las categoría y subcateorias y no veo la forma de poder listar los productos dentro de cada categoria o subcategoría.

otra cosa que habrán notado es que no logro que me lo liste

<ul>

<li></li>

<ul>
<li></li>
<li></li>
</ul>

<li></li>
<li></li>
</ul>

Sepan tolerar mi ignorancia, pero me estoy metiendo con php/mysql que me encanta!!!

Mil gracias

Claugtrs
  #2 (permalink)  
Antiguo 20/10/2009, 22:07
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Listar subcategorias

Hola
para los ul probaste esto?
Código PHP:
echo "<ul><li><a href='#'>".$value['nombre_categoria']."</a></li></ul>"
Ahora, tu dices esto
"O sea que solo logro listar las categoría y subcateorias y no veo la forma de poder listar los productos dentro de cada categoria o subcategoría."

pues en tu codigo no veo que estes consultando la tabla de los productos!
lo que tienes que hacer es lo mismo que estas haciendo con las categorias pero aplicado a los productos, obviamente haciendo en el select que hagas un WHERE para que busque por el id_categoria que este mostrando en ese momento, algo así
SELECT * from tabla WHERE campo = valor;
y pues esto iria dentro del foreach que ya tienes para que valor cambie cada vez que pasa de categoría
bueno, nos comentas
saludos
  #3 (permalink)  
Antiguo 21/10/2009, 09:50
 
Fecha de Ingreso: febrero-2004
Mensajes: 134
Antigüedad: 20 años, 2 meses
Puntos: 0
Respuesta: Listar subcategorias

Hola mortiprogramador.
Gracias por tu tiempo, probè con esto...

Código PHP:
function generate_menu2($id_padre)
        {$conexion=mysql_connect("localhost","l","") or  die("Problemas en la conexion");
         mysql_select_db("",$conexion) or  die("Problemas en la selecci&oacute;n de la base de datos");
         
         $query=mysql_query("SELECT * FROM categorias_productos ",$conexion);
         
         
            while ( $row = mysql_fetch_assoc($query) )
                {$menu_array[$row["id_categoria"]] = array("id_categoria" => $row["id_categoria"],"nombre_categoria" => $row["nombre_categoria"],"id_categoria_padre" => $row["id_categoria_padre"]);
                }
            foreach($menu_array as $key => $value)
                {if ($value["id_categoria_padre"] == $id_padre) 
                        {   
                        if($id_padre == 0)
                             
                            {echo "<ul><li><a href='#'>".$value['nombre_categoria']."</a></li></ul>";
                             generate_menu2($key);
                            }
                          
                        else 
                            {echo "<ul><li class='tab'><a href='#'>". $value['nombre_categoria']."</a></li></ul>";
                             generate_menu2($key);
                            }
                        
                            $consultaProducto=mysql_query("SELECT * FROM productos as p
                            join categorias_productos as cp
                            on p.idcategoria=cp.id_categoria
                            ",$conexion); 
                            while ( $reg = mysql_fetch_array($consultaProducto) )
                            {
                               echo $reg['nombre_producto'];     
                               }
                            
                        }
                }
    }
?>



<?php generate_menu2(0);?>
...Y nada, me sale

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /

y con respecto a

Código PHP:
"<ul><li><a href='#'>".$value['nombre_categoria']."</a></li></ul>" 
me sale...

<ul><li><a href='#'>Accesorios</a></li></ul>
<ul><li><a href='#'>Para Percución</a></li></ul>
<ul><li><a href='#'>Para Vientos</a></li></ul>
<ul><li><a href='#'>Amplificadores</a></li></ul>
<ul><li><a href='#'>Bajos</a></li></ul>
<ul><li><a href='#'>Charangos</a></li></ul>

Me parece que tendría que hacer un código desde cero y agregar una tabla para sub categorias.
  #4 (permalink)  
Antiguo 21/10/2009, 12:22
 
Fecha de Ingreso: febrero-2004
Mensajes: 134
Antigüedad: 20 años, 2 meses
Puntos: 0
Respuesta: Listar subcategorias

Probé estp y tampoco...

Código PHP:
<?php
function generate_menu2($id_padre)
        {
$conexion=mysql_connect("localhost","","l") or  die("Problemas en la conexion");
         
mysql_select_db("",$conexion) or  die("Problemas en la selecci&oacute;n de la base de datos");
         
         
$query=mysql_query("SELECT * FROM categorias_productos ",$conexion);
         
         
            while ( 
$row mysql_fetch_assoc($query) )
                {
$menu_array[$row["id_categoria"]] = array("id_categoria" => $row["id_categoria"],"nombre_categoria" => $row["nombre_categoria"],"id_categoria_padre" => $row["id_categoria_padre"]);
                }
            foreach(
$menu_array as $key => $value)
                {if (
$value["id_categoria_padre"] == $id_padre
                        {   
                        if(
$id_padre == 0)
                             
                            {echo 
"<ul><li><a href='#'>".$value['nombre_categoria']."</a></li></ul>";
                             
generate_menu2($key);
                            }
                          
                        else 
                            {echo 
"<ul><li class='tab'><a href='#'>"$value['nombre_categoria']."</a></li></ul>";
                             
generate_menu2($key);
                            }
                        
                            
                              
                              
$query2 mysql_query("select id_categoria, nombre_producto as 'nombre' from productos where id_categoria = "$row["id_categoria"]. " order by nombre_producto");
                                  
                               while(
$res2 mysql_fetch_array($query2)){ 
        
                            echo 
"<li><a href='#'>".$res2["nombre"]."</a></li>";
                            
generate_menu2($key);
                                }    
                               
                            
                        }
                }
    }
?>
será que en estos casos habrá que agregar una tabla "categoriasXsubcategorias" mmm me parece que es mas facil.
A ver si alguien lo ve mas claro, desde ya gracias por su tiempo.
  #5 (permalink)  
Antiguo 22/10/2009, 12:22
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Listar subcategorias

Hola
Bueno, no entiendo aún porque vuelves a llamar a la función que tienes una vez muestras lo que quieres (de esta misma función), creo que sería mejor que nos comentaras que es lo que quieres hacer para a su vez darte otras ideas
y pregunta, si imprimes la nueva consulta que hiciste y la corres en phpmyadmin si te funciona bien, es decir, te trae los datos que quieres?
nos comentas
saludos
y lo de ul li pues puedes hacer el ul fuera del ciclo y cerrarlo fuera del ciclo si no quieres que se repita el ul siempre sino solo al principio y al final
  #6 (permalink)  
Antiguo 26/10/2009, 07:48
 
Fecha de Ingreso: febrero-2004
Mensajes: 134
Antigüedad: 20 años, 2 meses
Puntos: 0
Respuesta: Listar subcategorias

Hola, gracias por tu tiempo multiprogramador!!!
Lo que quiero es que las sub categorias tambien tengan ul li y tambien las subsubcategorias, probé esto pero ma da algunos ul vacios

Código PHP:
<?php
function generate_menu2($id_padre)
        {
$conexion=mysql_connect("localhost","","") or  die("Problemas en la conexion");
         
mysql_select_db("",$conexion) or  die("Problemas en la selecci&oacute;n de la base de datos");
         
         
$query=mysql_query("SELECT * FROM categorias_productos ",$conexion);
         
mysql_close($conexion); 
         
            while ( 
$row mysql_fetch_assoc($query) )
                {
$menu_array[$row["id_categoria"]] = array("id_categoria" => $row["id_categoria"],"nombre_categoria" => $row["nombre_categoria"],"id_categoria_padre" => $row["id_categoria_padre"]);
                }
            foreach(
$menu_array as $key => $value)
                {if (
$value["id_categoria_padre"] == $id_padre
                
                        {   
                        if(
$id_padre == 0)
                            
                            {
                                echo 
"<li><a href='#'>".$value['nombre_categoria']."</a></li>";
                             
generate_menu2($key);
                            }
                          
                          else 
                            {
                                echo 
"<ul class='subCat'>";
                              echo 
"<li class='tab'><a href='listar.php?cat=".$row['id_categoria']."'>"$value['nombre_categoria']."</a></li>";
                             
                             
generate_menu2($key);
                             echo 
"</ul>";
                            }        
                            
                        }
                }
    }
?>


<ul>
<?php generate_menu2(0);?>
</ul>
  #7 (permalink)  
Antiguo 26/10/2009, 17:25
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Listar subcategorias

hola, pues yo creeria que lo mejor es que separes funciones de categorias y subcategorias, pues tal vez algo te este dando conflicto y te da los
vacios que comentas

intenta separandolos a ver como te va
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




La zona horaria es GMT -6. Ahora son las 21:39.