Я пытаюсь создать навигацию с подменю в торт 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>