using-menu.md 2.4 KB

Using Menu

Menu manager used for build hierarchical menu. This is automatically look of user role and permision then return menus that he has access.

use rbac\components\MenuHelper;
use yii\bootstrap\Nav;

echo Nav::widget([
    'items' => MenuHelper::getAssignedMenu(Yii::$app->user->id)
]);

Return of rbac\components\MenuHelper::getAssignedMenu() has default format like:

[
    [
        'label' => $menu['name'], 
        'url' => [$menu['route']],
        'items' => [
			[
				'label' => $menu['name'], 
				'url' => [$menu['route']]
            ],
            ....
        ]
    ],
    [
        'label' => $menu['name'], 
        'url' => [$menu['route']],
        'items' => [
			[
				'label' => $menu['name'], 
				'url' => [$menu['route']]
            ]
        ]
    ],
    ....
]

where $menu variable corresponden with a record of table menu. You can customize return format of rbac\components\MenuHelper::getAssignedMenu() by provide a callback to this methode. The callback must have format function($menu){}. E.g:

You can add html options attribut to Your menu, for example "title". When You create a menu, in field data (textarea) fill this :


and then in Your view:

php $callback = function($menu){

$data = eval($menu['data']);
return [
    'label' => $menu['name'], 
    'url' => [$menu['route']],
    'options' => $data,
    'items' => $menu['children']
];

}

$items = MenuHelper::getAssignedMenu(Yii::$app->user->id, null, $callback);


Default result is get from `cache`. If you want to force regenerate, provide boolean `true` as forth parameter.

You can modify callback function for advanced usage.

Using Sparated Menu
-------------------
Second parameter of `rbac\components\MenuHelper::getAssignedMenu()` used to get menu on it's own hierarchy.
E.g. Your menu structure:

* Side Menu
  * Menu 1
    * Menu 1.1
    * Menu 1.2
    * Menu 1.3
  * Menu 2
    * Menu 2.1
    * Menu 2.2
    * Menu 2.3
* Top Menu
  * Top Menu 1
    * Top Menu 1.1
    * Top Menu 1.2
    * Top Menu 1.3
  * Top Menu 2
  * Top Menu 3
  * Top Menu 4

You can get 'Side Menu' chldren by calling

php $items = MenuHelper::getAssignedMenu(Yii::$app->user->id, $sideMenuId); ```

It will result in

  • Menu 1
    • Menu 1.1
    • Menu 1.2
    • Menu 1.3
  • Menu 2
    • Menu 2.1
    • Menu 2.2
    • Menu 2.3