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)
}
}
?>