如何在 cakephp 3 中操作树形菜单的子项?

How to manipulate the child items of the tree menu in cakephp 3?

我对操纵子菜单项以改进显示样式存疑。

我目前正在根据文档生成:

function index() 
   {
     $list = $this->Categorias->find('threaded')->toArray(); 
     $this->set('list', $list);
   }    

$renderItems = function($items) use (&$renderItems)
{
    echo '<ul>';
    foreach ($items as $item) {
        echo '<li>';
        echo h($item->name);

        if ($item->children) {
            $renderItems($item->children); // < recursion
        }

        echo '</li>';
    }
    echo '</ul>';
};

$renderItems($list);

但是显示有误..显示格式是这样的:

感谢任何评论!

如树行为文档中所述,如果您想使用线程化结果,那么您需要某种递归功能来迭代顶级项目(您的示例正在执行),而且还嵌套的子项。

另请注意,在您的示例中使用 children 查找器只会检索具有指定主键的节点的子节点,即它不会检索其父节点,如果 table 包含多个根节点,它们也不会被检索。因此,根据您的数据,您可能只需要使用 threaded 查找器。

话虽如此,一个项目的子项嵌套在 children property/key 下,因此基本示例如下所示:

$renderItems = function($items) use (&$renderItems)
{
    echo '<ul>';
    foreach ($items as $item) {
        echo '<li>';
        echo h($item->name);

        if ($item->children) {
            $renderItems($item->children); // < recursion
        }

        echo '</li>';
    }
    echo '</ul>';
};

$renderItems($list);

这将创建一个像这样的嵌套列表(当然没有 formatting/indenting):

<ul>
    <li>
        Fun
        <ul>
            <li>
                Sport
                <ul>
                    <li>Surfing</li>
                    <li>Skating</li>
                </ul>
            </li>
        </ul>
    </li>
    <li>
        Trips
        <ul>
            <li>National</li>
            <li>International</li>
        </ul>
    </li>
</ul>

另见