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