Foros del Web » Programando para Internet » PHP »

numero de subcategorias no definidas?

Estas en el tema de numero de subcategorias no definidas? en el foro de PHP en Foros del Web. hola gente, estoy intentando crear un sistema de subcategorías en la cual el usuario pueda meter dentro del campo "categorias" la numeración (1, 1.1, 1.1.1, ...
  #1 (permalink)  
Antiguo 11/01/2007, 11:52
Avatar de deet  
Fecha de Ingreso: mayo-2005
Ubicación: Córdoba - Argentina
Mensajes: 269
Antigüedad: 18 años, 11 meses
Puntos: 1
numero de subcategorias no definidas?

hola gente,

estoy intentando crear un sistema de subcategorías en la cual el usuario pueda meter dentro del campo "categorias" la numeración (1, 1.1, 1.1.1, etc...) según a la subcategoría que pertenezca, y también el nombre de categoría o subcategoría.

por ejemplo:
1 Automoviles
1.1 Autos
1.1.1 Nafteros
1.1.1 5 puertas
1.2 Motos

2 Computación
2.1 Monitores
2.1.1 17"
2.1.2 19"
2.2 Gabinetes
2.3 Teclados
y así sucesivamente, hasta alcanzar indeterminados niveles de subcategorías.

Se que no es para nada catedrático lo que expongo, pero tengo un cliente que me propuso hacerlo de esta manera, porque le parecía mucho más facil de entenderlo y organizarlo. Traté de explicarle que hay otras soluciones que dan mucho mejor rendimiento en cuanto al tiempo de procesamiento de la DB, pero esto no le interesó para nada, solamente quiere poder categorizar de la manera que expuse al inicio de este mensaje.

bueno mi problema se me presentó a la hora de hacer el menú que debe ser desplegable, primero se mostrarían las categorias, luego las subcategorias, luego las subcategorías de estas ultimas según se seleccionen, esto lo resolveré mas adelante pero también es necesario darle distintas clases a los diferentes niveles de subcategorias y determinar si la subcategoría ya no contiene otras subcategorías por debajo.

con tanto rollo espero no haber mareado a nadie, aquí he intentado desarrollar algo, el problema es que se me cuelga el explorador cuando ejecuto el script, supongo que debe ser porque llamo a sí misma a una función.

Código PHP:
<?
function conectar(){
    
$link mysql_connect("localhost","root","");
    
mysql_select_db("basededatos",$link);
    return 
$link;
}

$link conectar();

function 
subcategorias($items,$level,$nombre){    
    
$space $add_ereg $sub '';
    for(
$j=0$j<$level$j++){
        
$space .= "-";
        
$add_ereg .= "\.[0-9]{1,3}";
    }
    
$num trim(substr($nombre,0,$level+1));
    
$ereg "^".$num.$add_ereg."[^\.]";
    foreach(
$items as $k => $v){
        if(
ereg($ereg,$v)){
            
$sub .= "$space $v<br />";
            echo 
subcategorias($items,$level++,$v);
        }
    }
    if(!empty(
$sub)){
        return 
$sub;
    }else{
        return 
"no hay items";
    }
}

$old_cat '';
//$sql = "SELECT * FROM categorias ORDER BY name_cat";
$sql "SELECT * FROM categorias ORDER BY name_cat";
$rs mysql_query($sql,$link);
while(
$row mysql_fetch_assoc($rs)){
    if(!
ereg("[0-9]{1,3}\.",$row["name_cat"])){
        echo 
$row["name_cat"]."<br />";
        
        
$old_cat $row["name_cat"];
        
$all_items = array();
        
preg_match("/[0-9]*/",$row["name_cat"],$categoria);
        
        
$s_sql "SELECT * FROM categorias WHERE name_cat LIKE '$categoria[0]%' ORDER BY name_cat";
        
$s_rs mysql_query($s_sql,$link);
        while(
$s_row mysql_fetch_assoc($s_rs)){
            if(
ereg("[0-9]{1,3}\.",$s_row["name_cat"])){
                
$all_items[] = $s_row["name_cat"];
            }
        }
        
$subcat subcategorias($all_items,1,$row["name_cat"]);
        echo 
$subcat;
        echo 
"<br /><br />";
    }else{
        
//saco del título el número de la categoría
        //preg_match("/[0-9]*/",$row["name_cat"],$categoria);
        //busco las subategorias
        //echo subcategorias($row["name_cat"],2); //subcategorias(categoria,level)
    
}
}

?>
desde ya muchas gracias.

Última edición por deet; 11/01/2007 a las 12:01
  #2 (permalink)  
Antiguo 11/01/2007, 12:20
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Re: numero de subcategorias no definidas?

Se que es obvio lo que diré, pero que sea una recursividad no tiene que ver (siempre y cuando no se genere como te esta pasando un loop infinito).
Ahora, lo que no llego a comprender es como tenes guardado en la db la info esta (por lo que vveo es 1.1 un nombre, 1.2 otro nombre, etc).

De todas maneras te recomiendo que uses el buffer para ir largando el contenido al browser y ver donde estas parado en cada iteración (con un ob_end_flush() al inicio y un flush() luego de cada echo), porque evidentemente siempre esta entrando en if(ereg($ereg,$v).
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #3 (permalink)  
Antiguo 11/01/2007, 15:40
Avatar de deet  
Fecha de Ingreso: mayo-2005
Ubicación: Córdoba - Argentina
Mensajes: 269
Antigüedad: 18 años, 11 meses
Puntos: 1
Re: numero de subcategorias no definidas?

nicolaspar gracias por responder,

En mi DB tengo los registros de la forma 1.1 un nombre, 1.2 otro nombre, etc. Tal como dices.

te cuento además que si le saco la línea:

echo subcategorias($items,$level++,$v);

muestra correctamente lo siguiente:

Código:
1 <<<< Automóviles >>>>
- 1.1 Autos
- 1.2 Motos
- 1.3 Camionetas
- 1.4 Camiones
- 1.5 Cuadriciclos


2 <<<< Celulares y telefonía >>>>
- 2.1 Accesorios Celulares
- 2.2 Celulares
- 2.3 Centrales Telefónicas
- 2.4 Faxes


3 <<<<< Casas >>>>>
no hay items
bueno seguiré haciendo pruebas y luego te cuento como me fué.
  #4 (permalink)  
Antiguo 11/01/2007, 16:44
Avatar de deet  
Fecha de Ingreso: mayo-2005
Ubicación: Córdoba - Argentina
Mensajes: 269
Antigüedad: 18 años, 11 meses
Puntos: 1
Re: numero de subcategorias no definidas?

ya encontré la falla estaba en la linea:

echo subcategorias($items,$level++,$v);

como podrás ver incrementaba en 1 el level en vez de sumarle uno, lo cual hacía que para la misma iteración le sumara levels y cada vez que entraba de nuevo a la funcion se incrementaba por la cantidad de items y como existe un bucle que condiciona segun el valor del level, se hacía muy grande ese valor X(

bueno ya he resuelto parte de mi problema, ahora tengo que hacer la parte realmente pesada, hacer que todo eso se vea lindo, cada level deberá ir dentro de una tabla y con diferentes clases.
Y lo mas importante de todo es que tengo que saber cual es la última subcategoría de cada una, para darle un link diferente al resto.

seguiré con esto, hasta darle el gusto al cliente.
  #5 (permalink)  
Antiguo 12/01/2007, 08:10
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Re: numero de subcategorias no definidas?

Groso, estos desafíos, aunque sabemos que no es la manera de hacerlo, están buenos :)
__________________
Mi punto de partida es Que Bueno Lo Nuevo
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 23:30.