Las tablas son:
Tengo 3 tablas que entran en la consulta
term_data:
tid
vid
name
term_node:
nid
tid
node:
nid
type
term_hierarchy
tid
parent
el name de term_data es el $showdata
el tid de term_data (y de term_node, y de term_hierarchy) es el $id_field.
el parent de term_hierarchy es el $link_field
el código.
Código PHP:
<?php
/*
funcion generica
Parametros:
$tabla = Nombre de la tabla en la DB
$id_field = Nombre del campo llave de la tabla
$show_data = Campo a mostrar en el arbol
$link_field= Campo que establece la relacion padre hijo
$parent = padre actual
$prefix = string con un campo a mostrar en cada entrada del arbol
*/
function crearArbol($id_field,$show_data,$link_field,$parent,$prefix){
/*Armar query*/
$sql="SELECT d.name, d.tid FROM term_data d, term_node dn, node nt, term_hierarchy th WHERE dn.tid = d.tid AND d.vid =3 AND nt.type = 'manualbp' AND nt.nid = dn.nid and '.$link_field.'='.$parent";
/*Asumiendo que se usa MySQL (se puede cambiar facilmente a otra db)*/
if ($parent != 0 && $prefix == '') $prefix = '--';
$rs=@mysql_query($sql);
if($rs){
/*Recorrer todos las entradas */
while($arr=mysql_fetch_array($rs)){
/* Imprimir campo a mostrar*/
echo('<option value="' . $arr[$id_field] . '">' . $prefix . $arr[$show_data] . '</option>' . chr(13));
//echo($prefix.$arr[$show_data].'<br>');
/* imprimir arbol the "hijos" de este elemento*/
crearArbol($id_field,$show_data,$link_field,$arr[$id_field],$prefix.$prefix);
}
}
}
?>
<?php
echo chr(13);
crearArbol('d.tid','d.name','th.parent',0,'');
?>
gracias
Oskar