如何使用 Yii 创建多级菜单
Posted
技术标签:
【中文标题】如何使用 Yii 创建多级菜单【英文标题】:How to create multi level menu using Yii 【发布时间】:2014-04-06 23:12:16 【问题描述】:yii中多级菜单的情况如何查询?
例如我有一个这样的表:
menu_name
会跟随 parrent_id
它有,所以它会形成一个分层菜单
如何在我的布局中使用Yii DAO
,以便输出为上面的html
我的代码:
<?php
Yii::import('zii.widgets.CMenu', true);
class ActiveMenu extends CMenu
public function init()
$criteria = new CDbCriteria;
$criteria->condition='published=:idpub AND menu_controller=:menu';
$criteria->params=array(':idpub'=>1, ':menu'=>'#');
$items = Menu::model()->findAll($criteria);
echo "<ul id='yw1' class='nav'>";
foreach ($items as $item)
echo "<li class='dropdown'>
<a href=".$item->menu_controller." data-toggle='dropdown' class='dropdown-toggle'>
<i class='icon-white icon-list'></i>".$item->menu_name."<b class='caret'></b></a>
</li>";
echo "</ul>";
parent::init();
但在上面的代码中我只得到parents data
。我要如何循环以将 childs data
包含在每个父菜单中,例如此 html 代码:
<ul id="yw1" class="nav">
<li><a href="/app/home.html"><span class="icon-white icon-tasks"></span> Home</a></li>
<li class="dropdown">
<a href="#" data-toggle="dropdown" class="dropdown-toggle">
<i class="icon-white icon-list"></i>Master<b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="expedition"><span class="icon-bar icon-list"></span> Expedition</a></li>
</ul>
<ul class="dropdown-menu">
<li><a href="partner"><span class="icon-bar icon-list"></span> Partner</a></li>
</ul>
<ul class="dropdown-menu">
<li><a href="user"><span class="icon-bar icon-list"></span> User</a></li>
</ul>
</li>
<li class="dropdown">
<a href="#" data-toggle="dropdown" class="dropdown-toggle">
<i class="icon-white icon-list"></i>Transaction<b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="processin"><span class="icon-bar icon-list"></span> Process In</a></li>
</ul>
<ul class="dropdown-menu">
<li><a href="processout"><span class="icon-bar icon-list"></span> Process Out</a></li>
</ul>
etc ....
etc ....
etc ....
</li>
</ul>
【问题讨论】:
【参考方案1】:您应该首先在 Menu
模型 (Menu.php) 中正确设置关系。
public function relations()
return array(
'parent' => array(self::BELONGS_TO, 'Menu', 'parent_id'),
'children' => array(self::HAS_MANY, 'Menu', 'parent_id'),
);
然后修改代码:
//other codes
foreach ($items as $item)
echo "<li class='dropdown'>
<a href=".$item->menu_controller." data-toggle='dropdown' class='dropdown-toggle'>
<i class='icon-white icon-list'></i>".$item->menu_name."<b class='caret'></b></a>
</li>";
foreach ($item->children as $child)
echo "<ul class='dropdown-menu'>
<li><a href='".$child->menu_controller."'><span class='icon-bar icon-list'></span> ".$child->menu_name."</a></li></u>";
//other codes
【讨论】:
以上是关于如何使用 Yii 创建多级菜单的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Bootstrap 4 和 Angular 7 在导航栏中制作多级下拉菜单