Foros del Web » Programando para Internet » PHP »

Crear categorias y subcategorias

Estas en el tema de Crear categorias y subcategorias en el foro de PHP en Foros del Web. Hola, estoy haciendo un catalogo de productos y es necesario que los divida por categorias y subcategorias ( y mas categorias dentro de las subcategorías ...
  #1 (permalink)  
Antiguo 04/10/2006, 08:58
Avatar de elkkbron  
Fecha de Ingreso: enero-2002
Ubicación: Puebla
Mensajes: 195
Antigüedad: 22 años, 3 meses
Puntos: 0
Crear categorias y subcategorias

Hola, estoy haciendo un catalogo de productos y es necesario que los divida por categorias y subcategorias ( y mas categorias dentro de las subcategorías )

he comprendido que la forma más sencilla es crear " niveles o referencias de las categorias " es decir :

ID,REF,NOMBRE

1 0 PROCESADORES
2 0 MONITORES
3 1 INTEL
4 2 SAMNSUNG
5 3 PENTIUM 4

El problema es : ¿ como crear el arbol de categorias usando php ?

categoria
----subcategoria1
-----------otra subcategoria
----subcategoria2
-----------otra subcategoria2
categoria2
  #2 (permalink)  
Antiguo 04/10/2006, 09:29
Avatar de Erikfrancisco  
Fecha de Ingreso: noviembre-2003
Ubicación: Estado de México
Mensajes: 503
Antigüedad: 20 años, 5 meses
Puntos: 4
Pues no se si es exactamente lo que quieres pero aquí te va un ejemplo:

Código PHP:
<?php
$productos 
= array ( 'c_escritorio' => array ( 'hp' => array ( 'z4056''mx546''n567' ),
                                               
'compaq' => array ( 't5456' ),
                                               
'apple' => array ( 'macquintosh''mac546' ) ),
                     
'mp3' => array ( 'ipod' => array ( 'nano''video'),
                                      
'sony' => array ('erickson') ),
                     
'impresoras' => array ( 'epson' => array ( 'jk54''to46'),
                                             
'hp' => array ( 'deskjet560''deskjet700' ),
                                             
'xerox' => array ( 'x1000''x2500' ) )
                    );

foreach ( 
$productos as $clave => $valor )
{
   echo 
$clave."<br/>";

   foreach ( 
$valor as $key => $value )
   {
      echo 
"----".$key."<br/>";

      foreach ( 
$value as $clave3 => $valor3 )
      {
         echo 
"-----------".$valor3."<br/>";
      }
   }
   echo 
"<p>";
}
?>
Hojala este ejemplo te sirva o por lo menos te de una idea. Suerte
  #3 (permalink)  
Antiguo 04/10/2006, 09:44
Avatar de elkkbron  
Fecha de Ingreso: enero-2002
Ubicación: Puebla
Mensajes: 195
Antigüedad: 22 años, 3 meses
Puntos: 0
lo de arriba funciona si ya sé cuantos niveles de categorias voy a ocupar. el problemas es que voy a crear niveles indefinidos de categorias, 1 >> 1.1 >>> 1.2 >>> etc.

tambien he usado éste tutorial :
http://www.forosdelweb.com/showpost....&postcount=146

pero claramente dice que con esa estructura se restringe a un solo padre por elemento.
  #4 (permalink)  
Antiguo 04/10/2006, 09:54
Avatar de Erikfrancisco  
Fecha de Ingreso: noviembre-2003
Ubicación: Estado de México
Mensajes: 503
Antigüedad: 20 años, 5 meses
Puntos: 4
El ejemplo que te mostre si te sirve para lo que quieres, mira, si no tienes idea de como hacerlo podrías ponerme algunos de los elementos como los quieres mostrar? para que te muestre el código hecho.
  #5 (permalink)  
Antiguo 04/10/2006, 11:19
Avatar de omegafunky  
Fecha de Ingreso: diciembre-2003
Ubicación: Tabasco, Mexico
Mensajes: 3.534
Antigüedad: 20 años, 3 meses
Puntos: 33
k onda erickfrancisto ahorita k vi tu ejemplo me llamo la atencion me serviria para algo k estoy tratando de hacer pero con consultas traer las categorias y subcategorias de la BD, sabes como seria? x ejemplo

cat_tipo_producto //tabla
id_tipo
nombre_tipo

subcat_monitor //tabla
id_submonitor
nombre_submonitor
  #6 (permalink)  
Antiguo 04/10/2006, 11:38
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por omegafunky Ver Mensaje
k onda erickfrancisto ahorita k vi tu ejemplo me llamo la atencion me serviria para algo k estoy tratando de hacer pero con consultas traer las categorias y subcategorias de la BD, sabes como seria? x ejemplo

cat_tipo_producto //tabla
id_tipo
nombre_tipo

subcat_monitor //tabla
id_submonitor
nombre_submonitor
Realmente deberías usar el modelo de datos que se presenta en este mensaje y primer mensaje:

http://www.forosdelweb.com/showpost....16&postcount=1

Fijate que se usa una sóla "tabla" con tus categorías .. ahí se emplea el campo "ref" que indica "de quien cuelga esta rama" .. Siendo la "ref 0" el "raiz.

Así puedes "anidar" tantas sub-categorias como necesites.

Esta tabla "categorias" sólo define la categoria . nada más .. lo ideal es relacionarla con lo que se necesita clasificar:

tabla productos
id_producto
id_categoria ---> clave foránea tabla categorias
nombre_producto
etc ...

tabla categorias
id_categoria
ref
nombre_categoria

Así .. tu "juegas" con la tabla "categorías" para presentar tu "arbol" de categorías (con sus sub-categorías). En tu tabla "productos" tienes la referencia de la "categoría" exacta que pertenece el "producto" para efectos de filtrados/clasificaciones .. y busquedas en general.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #7 (permalink)  
Antiguo 04/10/2006, 11:39
Avatar de Erikfrancisco  
Fecha de Ingreso: noviembre-2003
Ubicación: Estado de México
Mensajes: 503
Antigüedad: 20 años, 5 meses
Puntos: 4
Cual es la estructura de tu tabla omegafunky y también necesito que me especifiques cuales son tus subcategorias.
  #8 (permalink)  
Antiguo 04/10/2006, 12:56
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Puedes usar estas funciones:
Código PHP:
function despliegaCategorias() {
    
$sql "SELECT `id`, `nombre` FROM `categorias` WHERE `ref`='0' ORDER BY `nombre` ASC"// Buscar todas las categorias "padre"
    
$result mysql_query$sql ) or die( mysql_error() );
    
    echo 
"Empezar listado:<br>";
    while( 
$row mysql_fetch_array$result ) ) {
        echo 
$row['nombre'] . "<br>";
        
listaHijos"-"$row['id'] );
    }
    echo 
"Termiando de listar";
}
function 
listaHijos$prefix ''$id ) {
    
$sql "SELECT `id`, `nombre` FROM `categorias` WHERE `ref`='$id' ORDER BY `nombre` ASC"// Buscar las categorias de este padre
    
    
$result mysql_query$sql ) or die( mysql_error() );
    
    if( 
mysql_num_rows$result ) == ) {
        return; 
// No hay categorias "hijo"
    
}
    
    while( 
$row mysql_fetch_array$result ) ) {
        echo 
$prefix $row['nombre'];
        
listaHijos$prefix "-"$row['id'] );
    }

Ojo esto puede causar mucha recursion y tener luego un problema de estabilidad, lo mas recomendable y deseable, es que solo corras esta funcion 1 vez, y generes un array o una estructura, que luego puedas serializar y guardar en tu base de datos, implementando lo que se conoce como "caching", para evitar generar codigos muy intensos para PHP y para la base de datos.
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 04:31.