Ver Mensaje Individual
  #1 (permalink)  
Antiguo 04/12/2007, 07:27
oskar_calvo
 
Fecha de Ingreso: agosto-2006
Mensajes: 219
Antigüedad: 17 años, 9 meses
Puntos: 0
función crear arbol, ayuda

El problema es que en vez de ser una tabla única como en la versión original en este caso hay que tirar de 4 tablas diferentes.

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 != && $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