Ahora, un ejemplo igual al anterior, pero con el código orientado a objetos:
Nota: sólo por si acaso, les comento que me gusta utilizar siempre "camelCase" en código orientado a objetos y clases, y con guión bajo en funciones. Por eso mísmo, notar ésta diferencia: en las opciones por defecto de la función, utilizan guión bajo, y en la orientada a objetos, "camelCase" (por eso el alias en la consulta).
Código PHP:
Ver original<?php
use Diba\GenericTree\Node;
use Diba\GenericTree\NodeList;
use Diba\GenericTree\TableTree;
use Diba\GenericTree\TableTreeOptions;
use Diba\GenericTree\TableTreeHelper;
// MySQL info.
define('MYSQL_HOSTNAME', 'localhost'); define('MYSQL_USERNAME', 'root'); define('MYSQL_PASSWORD', '123456'); define('MYSQL_DATABASE', 'test');
// Crear conexión
try {
$sqlConnection = new PDO(
'mysql:dbname=' .MYSQL_DATABASE. ';host=' .MYSQL_HOSTNAME,
MYSQL_USERNAME,
MYSQL_PASSWORD
);
} catch (PDOException $e) {
'Database connection error: %s', $e->getMessage()
));
}
$sqlConnection->query('SET NAMES \'utf8\'');
// Obtener todas las filas del grupo "0"
$sqlQuery = '
SELECT
links.id,
links.name,
links_hierarchy.group_id AS groupId,
links_hierarchy.parent_id AS parentId,
links_hierarchy.order_no AS orderNo
FROM links
INNER JOIN links_hierarchy
ON links_hierarchy.link_id = links.id
WHERE links_hierarchy.group_id = :group
AND links.id > 0
';
// Crear "statement"
$sqlStatement = $sqlConnection->prepare($sqlQuery);
$sqlStatement->bindValue(':group', 0, PDO::PARAM_INT);
$sqlStatement->execute();
// Obtener los resultados
$sqlResult = $sqlStatement->fetchAll(PDO::FETCH_OBJ);
// Aplicar shuffle() sólo para demostrarles que no importa el orden, el árbol
// siempre se construirá normalmente
// Crear árbol desde la tabla de datos
$treeOptions = new TableTreeOptions();
$treeOptions->setIdKey('id');
$treeOptions->setParentIdKey('parentId');
$treeOptions->setComparator(function($a, $b) {
$a = $a->getValue()->name;
$b = $b->getValue()->name;
});
$tree = new TableTree($treeOptions);
$tree->build($sqlResult, true);
Bueno, eso es todo amigos... Espero que les sea útil y les haya gustado.
Les dejo un ejemplo online donde implementé el código con un menú (jQuery Sooperfish Menu Plugin), un breadcrumb, y algo similar a un "Tree View" (jQuery Nested Sortable Plugin) para administrar las ubicaciones con un simple "Drag and Drop":
http://test.dpmbaltar.com.ar/tree/ex...procedural.php
¡Hasta luego!