Lo que estoy intentando hacer es el una ruta de productos dinámica. He conseguido hacer lo que quiero, que es sacar toda la ruta de cada producto pero lo hago haciendo todos los SELECT hasta llegar al nivel 0. Tengo este código donde saco el padre de cada registro hasta llegar al nivel 0 de un tabla que tiene:
Idfamilia, familia, foto, padre, nivel.
Código PHP:
<?php
include("includes/conexion.php");
if (!$_GET) { ?>
<ul>
<li class="ultimo"><a href="productos.php" class="ultimo">Productos y Servicios</a></li>
</ul>
<?php $familia = "Productos y Servicios";
} else {
$fam = $_GET['fam'];
$familia = $_GET['familia'];
$sql = "SELECT * FROM familia WHERE padre = ".$fam." and familia = '".$familia."'";
$res = mysql_query ($sql) or die (mysql_error());
$fila = mysql_fetch_array($res);
if ($fam == 0) { ?>
<ul>
<li><a href="productos.php">Productos y Servicios</a></li>
<li class="ultimo"><a href="#" class="ultimo"><?php echo ucfirst($familia); ?></a></li>
</ul>
<?php } else if ($fam == 1) {
$sql2 = "SELECT * FROM familia WHERE Idfamilia=".$fila['padre'];
$res2 = mysql_query($sql2) or die (mysql_error());
$fila2 = mysql_fetch_array($res2);
?>
<ul>
<li><a href="productos.php">Productos y Servicios</a></li>
<li class="primero"><a href="productos.php?fam=<?php echo $fila['padre']; ?>&familia=<?php echo $fila['familia']; ?>"><?php echo $fila['familia']; ?></a></li>
<li class="ultimo"><a href="#" class="ultimo"><?php echo $familia; ?></a></li>
</ul>
<?php } else if ($fam == 3) {
$sql2 = "SELECT * FROM familia WHERE Idfamilia=".$fila['padre'];
$res2 = mysql_query($sql2) or die (mysql_error());
$fila2 = mysql_fetch_array($res2);
$sql3 = "SELECT * FROM familia WHERE Idfamilia=".$fila2['padre'];
$res3 = mysql_query($sql3) or die (mysql_error());
$fila3 = mysql_fetch_array($res3);
$sql4 = "SELECT * FROM familia WHERE Idfamilia=".$fila3['padre'];
$res4 = mysql_query($sql4) or die (mysql_error());
$fila4 = mysql_fetch_array($res4);
?>
<ul>
<li><a href="productos.php">Productos y Servicios</a></li>
<li class="primero"><a href="productos.php?fam=<?php echo $fila3['padre']; ?>&familia=<?php echo $fila3['familia']; ?>"><?php echo $fila3['familia']; ?></a></li>
<li class="segundo"><a href="productos.php?fam=<?php echo $fila2['nivel']; ?>&familia=<?php echo $fila2['familia']; ?>"><?php echo $fila2['familia']; ?></a></li>
<li class="ultimo"><a href="#" class="ultimo"><?php echo $familia; ?></a></li>
</ul>
<?php } else if ($fam == 5) {
$sql2 = "SELECT * FROM familia WHERE Idfamilia=".$fila['padre'];
$res2 = mysql_query($sql2) or die (mysql_error());
$fila2 = mysql_fetch_array($res2);
$sql3 = "SELECT * FROM familia WHERE Idfamilia=".$fila2['padre'];
$res3 = mysql_query($sql3) or die (mysql_error());
$fila3 = mysql_fetch_array($res3);
$sql4 = "SELECT * FROM familia WHERE Idfamilia=".$fila3['padre'];
$res4 = mysql_query($sql4) or die (mysql_error());
$fila4 = mysql_fetch_array($res4);
?>
<ul>
<li><a href="productos.php">Productos y Servicios</a></li>
<li class="segundo"><a href="productos.php?fam=<?php echo $fila4['padre']; ?>&familia=<?php echo $fila4['familia']; ?>"><?php echo $fila4['familia']; ?></a></li>
<li class="tercero"><a href="productos.php?fam=<?php echo $fila3['padre']; ?>&familia=<?php echo $fila3['familia']; ?>"><?php echo $fila3['familia']; ?></a></li>
<li class="tercero"><a href="productos.php?fam=<?php echo $fila2['padre']; ?>&familia=<?php echo $fila2['familia']; ?>"><?php echo $fila2['familia']; ?></a></li>
<li class="ultimo"><a href="#" class="ultimo"><?php echo $familia; ?></a></li>
</ul>
<?php }
}?>
Código PHP:
<?php
//Enlace de la pagina donde estaba: http://javiro.com/funcion-recursiva-para-generar-un-arbol-de-categorias-accesible/;
//Enlace del jquery tree: http://docs.jquery.com/Downloading_jQuery
include ("conexion.php");
//se declara la variable global $nivel para tener una referencia fuera de la función recursiva que indique el nivel de profundidad de subfamilia actual
$nivel = "";
global $nivel;
///funcion recursiva que recorre el menu
function recorrer_menu_familias($padre, $nivel_anterior){
//la consulta a la tabla familias busca los hijos del padre que entró como parametro a esta función
$sql="SELECT Idfamilia, familia, nivel, padre FROM familia WHERE padre = $padre";
$result=mysql_query($sql);
while($row = mysql_fetch_array($result)){
$clase = $row['nivel'];
switch ($clase) {
case 0:
$clase_fin = "clase1";
$span_folder = "folder";
break;
case 1:
$clase_fin = "clase2";
$span_folder = "folder2";
break;
case 2:
$clase_fin = "clase3";
$span_folder = "folder3";
break;
case 3:
$clase_fin = "clase4";
$span_folder = "folder4";
break;
}
if($GLOBALS['nivel']==""){
//si la goblal nivel está vacia es que acaba de empecar el ciclo recursivo
echo "<li class= 'closed $clase_fin'>";
}else{
//según la diferencia de nivel actual con el anterior guardada en $GLOBALS['nivel'] se cierran o abren etiquetas <Li>
$diferencia = $row['nivel'] - $GLOBALS['nivel'];
if($diferencia==0) echo "</li>\n<li class='closed $clase_fin'>\n"; //no ha cambiado de nivel de subfamilia respecto al anterior
if($diferencia==1) echo "<ul>\n<li class='closed $clase_fin'>\n"; //ha subido un nivel de subfamilia respecto al anterior
if($diferencia==-1) echo "</span></li>\n</ul>\n<li class='closed $clase_fin'>\n"; //ha bajado un nivel de subfamilia respecto al anterior
if($diferencia < (-1)){
//baja varios niveles de subfamilia respecto al anterior
echo "</span></li>";
for($i>=$diferencia;$i<0;$i++)
echo "</ul>\n</li>\n";
echo "<li class='closed $clase_fin'>\n";
}
}
//crea el enlace
$padre2 = $row['padre'];
$familia = $row['familia'];
echo "<div class='hitarea'><a href='productos.php?fam=$padre2&familia=$familia' class=$span_folder $clase_fin><span class='$span_folder'><span class='espacio'>".$row['familia']."</span></span></a></div>";
//actualiza $GLOBALS['nivel'] al nivel actual
$GLOBALS['nivel'] = $row['nivel'];
//se llama a si mismo para comprovar quienes son los hijos de la familia actual
recorrer_menu_familias($row['Idfamilia'],$row['nivel']);
}
}
//muestra menu
function muestra_menu_familias(){
recorrer_menu_familias(0, "");
echo "</li>\n";
for($i=0;$i==$GLOBALS['nivel'];$i++)
echo "</ul>\n</li>\n";
}
?>
<div id="main">
<ul id="browser" class="filetree">
<?php muestra_menu_familias(); ?>
</ul>
</div>
Gracias de antemano y saludos