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
 
