Cómo implementar un árbol de categorías y subcategorías utilizando PHP y MySQL

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>

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP