Buenas.
Estoy creando una serie de funciones que muestran las categorías de una web, ordenando las hijo dentro de las padres, y las "nieto" dentro de las hijo. Pero también quiero que las "bisnieto" las agrupe dentro de las "nieto".
Primero creé una función de mostrar las padre:
Código PHP:
function show_categories($allow_visibles, $allow_subcats, $order_by, $order_dir) {
if(!isset($allow_visibles)) { $allow_visible = 0; }
if(!isset($order_by)) { $order_by = 'name'; }
if(!isset($order_dir)) { $order_dir = 'asc'; }
switch($order_by) {
case 'name':
$order = 'name';
break;
case 'order':
$order = 'order';
break;
case 'visible':
$order = 'visible';
break;
default:
$order = 'id';
break;
}
if($order_dir = 'asc'){ $ordered_dir = 'ASC'; } else { $ordered_dir = 'DESC'; }
if($allow_visibles == 'no') { $allowed_visibles = 'no'; } elseif ($allow_visibles == 'yes') { $allowed_visibles = 'not'; } else {$allowed_visibles = 'no'; }
include('config.php');
$conn['sql'] = "SELECT * FROM categories WHERE visible <> '$allowed_visibles' AND parent = 'no' ORDER BY $order $ordener_dir";
$conn['result'] = mysql_query($conn['sql'])
or die ("<strong>Error de consulta:</strong> " . mysql_error());
$cat = mysql_fetch_array($conn['result']);
echo '<ul>';
do {
echo '<li>'.$cat['name'].'</li>';
if($allow_subcats == 'yes') {
show_subcategories($cat['id'], $allowed_visibles, $order, $ordener_dir);
}
} while ($cat = mysql_fetch_array($conn['result']));
echo '</ul>';
}
Y luego una para mostrar las hijo:
Código PHP:
function show_subcategories($cat_parent, $allowed_visibles, $order, $ordener_dir) {
include('config.php');
$conn2['sql'] = "SELECT * FROM categories WHERE parent = '$cat_parent' AND visible <> '$allowed_visibles' ORDER BY $order $ordener_dir";
$conn2['result'] = mysql_query($conn2['sql'])
or die ("<strong>Error de consulta:</strong> " . mysql_error());
$subcat = mysql_fetch_array($conn2['result']);
$num_subcat = mysql_num_rows($conn2['result']);
if($num_subcat > 0) {
echo '<ul>';
do {
echo '<li>'.$subcat['name'].'</li>';
} while ($subcat = mysql_fetch_array($conn2['result']));
echo '</ul>';
}
}
Pero así no muestro las "nieto" ni las "bisnieto". Claro, puedo hacer mediante el método que usé para mostrar las hijo, una serie de funciones que me muestren las "nieto", "bisnieto" y las que necesite. Pero el problema es que no sé cuántas necesito. Así que no me voy a estar haciendo 40 funciones para mostrar las categorías que la mayoría de los usuarios crearán.
Necesito un método con el cual no necesite crear tropecientas funciones, sinó sólo un par.
¿Cómo puedo hacerlo?