我想用我的表(db)创建一个动态菜单。我已经按照以下说明进行了操作:
表:“menupanal”
步骤01:我只是在app \ components \ Controller.php
中创建一个超级控制器以下是代码:
namespace app\components;
use app\models\MenuPanal;
class Controller extends \yii\web\Controller
{
public $menuItems = [];
public function init(){
$items = MenuPanal::find()
->where(['c_type' => 'MENU'])
->orderBy('id')
->all();
$menuItems = [];
foreach ($items as $key => $value) {
$this->menuItems[] =
['label' => $value['c_name'],
'items'=> [
['label' => $value['c_redirect'], 'url' => ['#']],
],
];
}
parent::init();
}
步骤02:更改了主要布局页面:
echo Nav::widget([
'options' => ['class' => 'navbar-nav navbar-right'],
'items' => Yii::$app->controller->menuItems,
]);
它只在一个层面上工作。我的问题::
问题:如何使用超级控制器添加多级菜单?
我是Yii2的新人。帮助非常感谢。
答案 0 :(得分:1)
您可以使用嵌套集。查看Yii的这个扩展名:http://www.yiiframework.com/extension/nestedsetbehavior/及其文档。您需要做的就是为嵌套集动态创建菜单项数组。
我发现有一个Yii2扩展版本:http://www.yiiframework.com/extension/yii2-nestedsetbehavior/
祝你好运答案 1 :(得分:1)
在Component文件夹中创建新的MenuHelper。没有默认的组件文件夹。请自己创造。
<?php
namespace app\components;
use app\models\MenuPanel;
use app\models\Zuser;
use app\models\Vwrole;
use app\assets\AppAsset;
class MenuHelper
{
public static function getMenu()
{
$role_id = 1;
$result = static::getMenuRecrusive($role_id);
return $result;
}
private static function getMenuRecrusive($parent)
{
$items = MenuPanel::find()
->where(['c_parentid' => $parent])
->orderBy('c_sortord')
->asArray()
->all();
$result = [];
foreach ($items as $item) {
$result[] = [
'label' => $item['c_name'],
'url' => ['#'],
'items' => static::getMenuRecrusive($item['id']),
'<li class="divider"></li>',
];
}
return $result;
}
}
在主布局页面中输入以下代码
echo Nav::widget([
'options' => ['class' => 'navbar-nav navbar-right'],
'items' => app\components\MenuHelper::getMenu(),
享受编码!!
答案 2 :(得分:0)
您可以将此扩展程序用于多级下拉列表Multi level Dropdown