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
La información que recibo desde MySQL en la variable $result viene de la siguiente forma:
Código:
Y el echo debe imprimir una cadena con la siguiente estructura: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 | ... ...
Código:
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.[ {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:[ ... ]} ... ]
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;
Saludos,
Silver