Cakephp 3.8创建树导航
我试图在CakePHP3.8中创建一个带有子菜单的导航 我已经用一些字段设置了数据库,例如parent_id、lft、rght和level(以及更多) 我已经尝试过创建自己的menuhelper,并在其中添加了以下代码: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'
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或更高,然后应该添加一个子菜单。但不是在正确的位置这样做。我是否应该以不同的方式检查子菜单?