Ver Mensaje Individual
  #1 (permalink)  
Antiguo 10/11/2009, 11:43
Silver
 
Fecha de Ingreso: noviembre-2001
Ubicación: México DF
Mensajes: 128
Antigüedad: 23 años, 2 meses
Puntos: 0
Crear arbol con diferentes niveles...

Saludos amigos,

Llevo días con un problemilla tratando de crear un organigrama de manera dinámica, leyendo la información de MySQL y creando con PHP las jerarquías.

La estructura del organigrama debe ser parecida a:
Código PHP:
Direccion General
Dirección Comercial
      
|---> Ventas
      
|---> Marketing
Dirección Finanzas
      
|---> Contabilidad
      
|---> Crédito
Recursos Humanos
Dirección Operaciones
      
|---> Centros
               
|---> Almacen
               
|---> Contabilidad
               
|---> Pedadogía
                        
|---> Supervisores
                        
|---> Profesores
               
|---> Recepción
      
|---> Logistica
Dirección IT 
Si se fijan hay un nivel 0, pero puede haber hasta N niveles indentados.

La información que recibo desde MySQL en la variable $result viene de la siguiente forma:
Código:
mysql> SELECT id, position, parentid FROM Jobs;
+---+----------------------+----------+
| id | position            | parentid |
+---+----------------------+----------+
|  1 | Direcion General    | Null     |
|  2 | Dirección Comercial | Null     |
|  3 | Ventas              |  2       |
|  4 | Marketing           |  2       |
|  5 | Dirección Finanzas  | Null     |
...
...
Y el echo debe imprimir una cadena con la siguiente estructura:
Código:
[
  {id:1, position:"Dirección General", leaf:true},
  {id:2, position:"Dirección Comercial", children:[
    {id:3, position:"Ventas", leaf:true},
    {id:4, position:"Marketing", leaf:true}
  ]},
  {id:5, position:"Dirección Finanzas", children:[
    ...
  ]}
  ...
]
El siguiente código me funciona solo cuando hay nivel 0 y nivel 1, pero cuando existen más niveles me da error al no cerrar correctamente el children del nivel anterior al actual.
Código PHP:
$dptos = new Department();
$result $dptos->getDptosByCompany($cookie->idcompany);
if (
$result) {
     
$str '[';
     for (
$i=0$i<sizeof($result); $i++) {
          
$str .= '{id:'.$result[$i]['id'];
          
$str .= ', position:"'.$result[$i]['position'].'"';
          if (
$result[$i]['id'] == $result[$i+1]['parentid'])
               
$str .= ', children:[';
          else
               
$str .= ($result[$i]['parentid'] != $result[$i+1]['parentid']) ? ', leaf:true}]},' ', leaf:true},';  
     }
     echo 
rtrim($str,',').']';
} else
     echo 
false
Alguna sugerencia????
Saludos,

Silver
__________________
Nuedi Servicios SA de CV
http://www.nuedi.mx