У меня есть некоторые иерархические данные, которые мне нужно отобразить в серии вложенных UL. Для каждого элемента у меня есть имя, идентификатор и значение глубины. Обычно я бы просто группировал эти элементы по глубине, но на самом деле мне нужно создать древовидную структуру с моими данными, например:
Вот мой вопрос :Есть ли хороший способ создать корректную разметку (Мне бы очень хотелось это, если бы я мог распечатать его с правильной табуляцией, но это будет сложно ), когда мои данные будут заключены во вложенные UL? У меня уже есть решение, которое работает, но я получаю один случайный тег. Вот код, который у меня есть для этого:
'Earth'
GROUP BY node.ID
ORDER BY node.LeftVal";
$results = $db->executeQuery($query);
?>
'.PHP_EOL.''.$row["Name"]."".PHP_EOL;
$diff = $last_level - $row["level"];
if($diff == 0){
// Sibling
echo ($row["level"] != 0) ? ''.PHP_EOL.$link:$link;
}
elseif($diff < 0){
// Child
$demoter = ''.PHP_EOL;
for ($i=0; $i > $diff; $i--) {
echo $demoter;
}
echo $link;
}
else{
// Parent
$promoter = ''.PHP_EOL.'
';
for ($i=0; $i < $diff; $i++) {
echo ($row["level"] != 0) ? $promoter.PHP_EOL."":$promoter;
}
echo $link;
}
$last_level = $row["level"];
}
?>
Любые идеи?
::Редактировать ::Я создал pastebin со сгенерированным источником, который не проверяется. Pastebin.com
::РЕДАКТИРОВАТЬ 2 ::Вот схема для таблицы Region. Он разработан с использованием гибрида модели вложенного набора и модели списка смежности.
CREATE TABLE Region (
ID INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'Stores the ID for the Region.',
Name VARCHAR(45) NOT NULL COMMENT 'Stores the name of the Region',
Region_Type VARCHAR(45) NOT NULL COMMENT 'Stores the Region type.',
Parent INT COMMENT 'Stores the ID of the Parent Region',
LeftVal INT NOT NULL,
RightVal INT NOT NULL,
PRIMARY KEY (ID)
) COMMENT 'Stores information about all Regions.' ENGINE=INNODB
ROW_FORMAT=DEFAULT CHARACTER SET utf8 collate utf8_general_ci;