Ver Mensaje Individual
  #1 (permalink)  
Antiguo 11/01/2007, 11:52
Avatar de deet
deet
 
Fecha de Ingreso: mayo-2005
Ubicación: Córdoba - Argentina
Mensajes: 269
Antigüedad: 19 años
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