Торт php 3.8 создать дерево навигации - PullRequest
0 голосов
/ 13 марта 2020

Я пытаюсь создать навигацию с подменю в торт php 3.8.

Я настроил базу данных с некоторыми полями, например parent_id, lft, rght и level (и другие).

Я уже пытался создать свой собственный помощник по меню и добавил туда следующий код:

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;
    }
}

В view.ctp я добавил:

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

Я попробовал это с информацией на торте php страница дерева: https://book.cakephp.org/3/en/orm/behaviors/tree.html

Но я не могу заставить работать подменю.

Обновление

Я добавил комментарий Седева и получаю подменю, только оно не внутри элемента li родителей, оно чуть ниже, что не должно происходить.

В основном это показано так :

<ul>
    <li>item1</li>
    <li>item2</li>
    <div>submenu</div>
</ul>

Пока должно быть:

<ul>
    <li>item1</li>
    <li>item2
        <div>submenu</div>
    </li>
</ul>
...