使用 OL 和 LI 显示树索引

由于我更喜欢使用原始助手和行为,因此我也将它用于我的树。在本文中,我想阐明如何使用无序列表甚至表格显示树。假设您在参考 时创建了数据库表,您应该能够在类别模型的控制器中使用以下代码

<?php
class CategoriesController extends AppController {
    public function index() {

            $categories = $this->Category->find('threaded', array(
                    'order' => array('Category.lft'))
            );
            $this->set('categories', $categories);

    }
}
?>

这将返回一个包含所有类别的嵌套结构数组。

为了解析,或者我应该说,为了显示这个数组,而不必费心使用 UL 或 OL 标签,甚至表格,让我向您介绍递归函数

<?php
function RecursiveCategories($array) {

    if (count($array)) {
            echo "\n<ul>\n";
        foreach ($array as $vals) {

                    echo "<li id=\"".$vals['Category']['id']."\">".$vals['Category']['name'];
                    if (count($vals['children'])) {
                            RecursiveCategories($vals['children']);
                    }
                    echo "</li>\n";
        }
            echo "</ul>\n";
    }
} ?>

此函数为每个类别及其子类别返回一个 ul 和 li 列表。如果子类别有子类别,该函数会为它们自身调用自身,并返回另一个 ul。现在只需在您的视图中打印结果

<?= RecursiveCategories($categories) ?>

应该很容易添加用于上下移动类别,甚至删除的箭头。您只需将它们放在 li 中即可。