Cakephp 3.8创建树导航

Cakephp 3.8创建树导航,cakephp,cakephp-3.0,Cakephp,Cakephp 3.0,我试图在CakePHP3.8中创建一个带有子菜单的导航 我已经用一些字段设置了数据库,例如parent_id、lft、rght和level(以及更多) 我已经尝试过创建自己的menuhelper,并在其中添加了以下代码: public function showMenu($id) { if (!$id) { return; } $menuitems = TableRegistry::getTableLocator()->get('menuitems'

我试图在CakePHP3.8中创建一个带有子菜单的导航

我已经用一些字段设置了数据库,例如parent_id、lft、rght和level(以及更多)

我已经尝试过创建自己的menuhelper,并在其中添加了以下代码:

public function showMenu($id)
{
    if (!$id) {
        return;
    }
    $menuitems = TableRegistry::getTableLocator()->get('menuitems')->find('all')->where(['menu_item_menu_id' => $id])->order(['menu_item_position'=>'ASC']);
    $mbclass = $ismobile ? 'mb-3' : '';
    if ($menuitems) {
        $menu = "<div class='collapse navbar-collapse my-2 my-md-0' id='navbarToggler'><ul class='navbar-nav ml-auto mr-2 ".$mbclass ."'>";
        foreach ($menuitems as $items) {
            if ($items->level == 0) {

                $parent_id = $items->id;
                if ($items->parent_id == 0) {
                    $menu .= "<li class='nav-item'><a class='nav-link' href='".$items->slug."'><span class='menu-text'>".$items->menu_item_title."</span><span class='menu-bottom'></span></a>";
                }
            }
            if ($items->level == 1 || $items->level == 2) {
                if ($parent_id == $items->parent_id) {
                    $menu .= "<div class='dropdown-menu'>";
                        $menu .= "<a class='dropdown-item' href='".$items->slug."'>".$items->menu_item_title."</a>";
                    $menu .= "</div>";
                }
            }
            if ($items->level == 0) {
                if ($items->parent_id == 0) {
                    $menu .= "</li>";
                }
            }
        }
        $menu .= "</ul>";
        $menu .= "<span class='sep d-sm-none d-md-block'></span>";
        $menu .= "<a class='btn btn-outline-success btn-login' href='/login'>Leden Inlog</a>";
        $menu .= "</div>";
        return $menu;
    }
}
公共功能显示菜单($id)
{
如果(!$id){
返回;
}
$menuitems=TableRegistry::getTableLocator()->get('menuitems')->find('all')->其中(['menu\u item\u menu\u id'=>$id])->顺序(['menu\u item\u position'=>'ASC']);
$mbclass=$ismobile?'mb-3':'';
如果($menuitems){
$menu=“”;
$菜单=“”;
$菜单=“”;
$菜单=“”;
返回$menu;
}
}
在view.ctp上,我添加了:

    <?= $this->Menu->showMenu(38) ?>

我用cakephp树页面上的信息进行了尝试:

但我无法让子菜单工作

更新

我已经添加了Sehdev的评论,我得到了子菜单,只是它不在parents li元素中,它就在那里,这是不应该发生的

基本上是这样显示的:

<ul>
    <li>item1</li>
    <li>item2</li>
    <div>submenu</div>
</ul>
  • 项目1
  • 项目2
  • 子菜单
虽然它应该是:

<ul>
    <li>item1</li>
    <li>item2
        <div>submenu</div>
    </li>
</ul>
  • 项目1
  • 项目2 子菜单

尝试执行:
$menus=TableRegistry::getTableLocator()->get('menuitems')$菜单->恢复()
如果($items->level==0)
如果($items->level==1 | |$items->level==2)
都在不同的迭代中执行,这就是为什么您得到这种输出它在相同的foreach循环中,但基本上是检查级别是否为1或更高,然后应该添加一个子菜单。但不是在正确的位置这样做。我是否应该以不同的方式检查子菜单?