How can I build this HTML code:
<ul class="tree">
<li>Animals
<ul>
<li>Birds</li>
<li>Mammals
<ul>
<li>Elephant</li>
<li>Mouse</li>
</ul>
</li>
<li>Reptiles</li>
</ul>
</li>
<li>Plants
<ul>
<li>Flowers
<ul>
<li>Rose</li>
<li>Tulip</li>
</ul>
</li>
<li>Trees</li>
</ul>
</li>
</ul>
From this structure:
CREATE TABLE `categories` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`position` INT(11) DEFAULT NULL,
`parent_id` INT(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `parent_id_fk` (`parent_id`),
CONSTRAINT `categories_ibfk_1` FOREIGN KEY (`parent_id`) REFERENCES `categories` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `categories` (`id`, `position`, `parent_id`)
VALUES
(1,1,NULL),
(2,2,NULL),
(3,1,1),
(4,2,1),
(5,1,4),
(6,2,4),
(7,3,1),
(8,1,2),
(9,1,8),
(10,2,8),
(11,2,2);
CREATE TABLE `categories_locale` (
`id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`slug` VARCHAR(100) NOT NULL DEFAULT '',
`name` VARCHAR(40) NOT NULL DEFAULT '',
`path_cache` text,
`category_id` INT(11) NOT NULL,
`locale_id` SMALLINT(5) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `categories_locale` (`id`, `slug`, `name`, `path_cache`, `category_id`, `locale_id`)
VALUES
(1,'animals','Animals',NULL,1,1),
(2,'plants','Plants',NULL,2,1),
(3,'birds','Birds',NULL,3,1),
(4,'mammals','Mammals',NULL,4,1),
(5,'elephant','Elephant',NULL,5,1),
(6,'mouse','Mouse',NULL,6,1),
(7,'reptiles','Reptiles',NULL,7,1),
(8,'flowers','Flowers',NULL,8,1),
(9,'rose','Rose',NULL,9,1),
(10,'tulip','Tulip',NULL,10,1),
(11,'trees','Trees',NULL,11,1);
Hmm, I believe there must be examples available online on how you can accomplish this. Some of them might even talk about new ways to store hierarchical data and you’ll find the readings interesting.
Anyways, this code snippet, based on recursion, might help you achieve your HTML.
Hope it helps!