Yii2中的Dynamic Multilevel下拉菜单

时间:2014-06-04 07:15:17

标签: yii2 yii-extensions yii-components

我想用我的表(db)创建一个动态菜单。我已经按照以下说明进行了操作:

表:“menupanal”

Table : "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的新人。帮助非常感谢。

3 个答案:

答案 0 :(得分:1)

您可以使用嵌套集。查看Yii的这个扩展名:http://www.yiiframework.com/extension/nestedsetbehavior/及其文档。您需要做的就是为嵌套集动态创建菜单项数组。

我发现有一个Yii2扩展版本:http://www.yiiframework.com/extension/yii2-nestedsetbehavior/

祝你好运

答案 1 :(得分: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;
        }
    
    }
    
  2. 在主布局页面中输入以下代码

        echo Nav::widget([
            'options' => ['class' => 'navbar-nav navbar-right'],
            'items' => app\components\MenuHelper::getMenu(),
    
  3. 享受编码!!

答案 2 :(得分:0)

您可以将此扩展程序用于多级下拉列表Multi level Dropdown