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>';
}
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>';
}
}
Necesito un método con el cual no necesite crear tropecientas funciones, sinó sólo un par.
¿Cómo puedo hacerlo?