Un árbol de categorÃas y subcategorÃas nos proporciona una manera sencilla de listar las categorÃas padre e hijo. En dicho árbol podremos ver una clara separación entre padres e hijos para que el usuario pueda tenerlo en cuenta. La vista en árbol de categorÃas siempre se recomienda para mostrar un nivel infinito de categorÃas y subcategorÃas.
En este tutorial te mostraremos cómo crear un árbol de categorÃas y subcategorÃas de forma dinámica utilizando PHP y MySQL. El árbol de categorÃas recursivo es muy útil para enumerar categorÃas de nivel n en un menú desplegable. En este código te ayudaremos a desarrollar un menú desplegable de categorÃas y subcategorÃas en forma de árbol en PHP. La información de las categorÃas la extraeremos de una base de datos MySQL.
Crear tabla de la base de datos
Para almacenar categorÃas y subcategorÃas tendremos que crear una tabla en la base de datos. El siguiente código SQL creará una tabla de categorÃas en la base de datos MySQL.
CREATE TABLE `categories` ( `id` int(11) NOT NULL AUTO_INCREMENT, `parent_id` int(11) NOT NULL DEFAULT '0', `name` varchar(100) COLLATE utf8_unicode_ci NOT NULL, `created` datetime NOT NULL, `modified` datetime NOT NULL, `status` enum('1','0') COLLATE utf8_unicode_ci NOT NULL DEFAULT '1' COMMENT '1:Active, 0:Inactive', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
La columna parent_id define si la categorÃa es padre o hija. Si el parent_id es 0, es una categorÃa padre. De otro modo, si dicha columna tiene un valor, ese valor es el ID de su categorÃa padre.
Configuración de la base de datos (dbConfig.php)
Utilizaremos el fichero dbConfig.php para conectarnos y seleccionar la base de datos. Para ello definimos el host ($dbHost), el nombre de usuario ($dbUsername), la contraseña ($dbPassword) y el nombre de la base de datos ($dbName) como nuestras credenciales de la base de datos.
<?php // Database configuration $dbHost = "localhost"; $dbUsername = "root"; $dbPassword = "root"; $dbName = "noprog"; // Create database connection $db = new mysqli($dbHost, $dbUsername, $dbPassword, $dbName); // Check connection if ($db->connect_error) { die("Connection failed: " . $db->connect_error); } ?>
Función recursiva para general el árbol padre/hijos
La función categoryTree() genera un árbol de categorÃas y subcategorÃas de nivel n con PHP. Creará las opciones de nuestro desplegable que incluirá el árbol de categorÃas.
- $parent_id: Opcional. Define el ID del padre para obtener sus categorÃas hijas.
- $sub_mark: Opcional. Marca que se agregará al principio de cada categorÃa hija.
<?php // Include the database configuration file require 'dbConfig.php'; function categoryTree($parent_id = 0, $sub_mark = ''){ global $db; $query = $db->query("SELECT * FROM categories WHERE parent_id = $parent_id ORDER BY name ASC"); if($query->num_rows > 0){ while($row = $query->fetch_assoc()){ echo '<option value="'.$row['id'].'">'.$sub_mark.$row['name'].'</option>'; categoryTree($row['id'], $sub_mark.'---'); } } }
Mostrar nuestro árbol de categorÃas en un desplegable
Solo tienes que llamar a la función categoryTree() para mostrar un árbol de categorÃas que puedes utilizar dentro de un desplegable.
<select name="category"> <?php categoryTree(); ?> </select>