Я написал рекурсивную функцию, которая будет рисовать дерево, начиная с любого узла. Указание корневого узла нарисует все дерево. Он используется в плагине моей корзины, и вы можете просмотреть демонстрацию завершенного пользовательского интерфейса здесь .
Я вставил функцию ниже, но изменил ее из своей реализации, чтобы сделать ее более понятной.
<?php
//Render a nested set. Recurses for all descendants of that node. Can be used to draw entire tree, when specifying root id.
//Secondary parameter ($node) is used for performance boost, internally in function.
public static function display_node($id, $node = null) {
$isRoot = false;
if ($node == null) {
$node = Doctrine_Core::getTable('YOURNESTEDTABLENAME')->findOneById($id)->getNode();
if ($node->isRoot()) {
$isRoot = true;
}
}
$record = $node->getRecord();
if (!$isRoot) {
echo "<li class='tree_item' id='list_". $record->getId() . "'>";
echo "<div class='listitem' id='listitem_".$record->getId()."'>";
echo $record->getName();
echo "<div style='clear:both'></div>";
echo "</div>";
if ($node->hasChildren()) {
echo "<ol>";
foreach ($node->getChildren() as $child) {
self::display_node($child->getId(), $child->getNode());
}
echo "</ol>";
}
}
else {
if ($node->hasChildren()) {
echo "<ol class='sortable'>";
echo "<li class='tree_item root_item' style='position: relative;' id='list_". $record->getId() . "'>";
foreach ($node->getChildren() as $child) {
self::display_node($child->getId(), $child->getNode());
}
echo "</ol>";
}
}
}
?>
Вы также можете легко изменить код для добавления URL-адресов по своему усмотрению.
Надеюсь, это поможет. Дайте мне знать, если вам потребуются разъяснения.