Eutherpy
Eutherpy

Reputation: 4571

Make a simple sub-menu using HTML, PHP

I have a yii2 application, and this is a part of my layouts/main.php view:

<?php
/* @var $this \yii\web\View */
/* @var $content string */    
...
<body>
<?php $this->beginBody() ?>
<div class="wrap">
    <?php
    NavBar::begin([
        'brandLabel' => Yii::t('app', Yii::$app->name),
        'brandUrl' => Yii::$app->homeUrl,
        'options' => [
            'class' => 'navbar-default navbar-fixed-top',
        ],
    ]);

    // everyone can see Home page
    $menuItems[] = ['label' => Yii::t('app', 'Home'), 'url' => ['/index.php/']];

    // we do not need to display About and Contact pages to employee+ roles
    if (!Yii::$app->user->can('employee')) {
        //$menuItems[] = ['label' => Yii::t('app', 'About'), 'url' => ['/site/about']];
        $menuItems[] = ['label' => Yii::t('app', 'Contact'), 'url' => ['/site/contact']];
    }

    // display Users to admin+ roles
    if (Yii::$app->user->can('admin')){
        $menuItems[] = ['label' => Yii::t('app', 'Users'), 'url' => ['/user/index']];
    }

    // display Logout to logged in users
    if (!Yii::$app->user->isGuest) {
        //add items, rooms etc. to menu for logged in users
        $menuItems[] = ['label' => Yii::t('app', 'Personnel'), 'url' => ['/person/index']];
        $menuItems[] = ['label' => Yii::t('app', 'Items'), 'url' => ['/item/index']];
        $menuItems[] = ['label' => Yii::t('app', 'Locations'), 'url' => ['/location/index/']];
        $menuItems[] = ['label' => Yii::t('app', 'Buildings'), 'url' => ['/building/index/']];
        $menuItems[] = ['label' => Yii::t('app', 'Rooms'), 'url' => ['/room/index/']];
        $menuItems[] = [
            'label' => Yii::t('app', 'Logout'). ' (' . Yii::$app->user->identity->username . ')',
            'url' => ['/site/logout'],
            'linkOptions' => ['data-method' => 'post']
        ];
    }

    // display Signup and Login pages to guests of the site
    if (Yii::$app->user->isGuest) {
        $menuItems[] = ['label' => Yii::t('app', 'Signup'), 'url' => ['/site/signup']];
        $menuItems[] = ['label' => Yii::t('app', 'Login'), 'url' => ['/site/login']];
    }

    echo Nav::widget([
        'options' => ['class' => 'navbar-nav navbar-right'],
        'items' => $menuItems,
    ]);

    NavBar::end();
    ?>

As you can see, I have location, room and building in my menu. However, I'd like to only have location in the main menu, and room and building in location's sub-menu. Is there a simple way to do this?

Upvotes: 1

Views: 160

Answers (1)

Paul
Paul

Reputation: 1657

I don't know what exactly your sub-menu is, if you only want to generate a dropdown list, you may

// display Logout to logged in users
if (!Yii::$app->user->isGuest) {
    //add items, rooms etc. to menu for logged in users
    $menuItems[] = [
        'label' => Yii::t('app', 'Locations'),
        'url' => ['/location/index/'],
        'items' => [
            ['label' => Yii::t('app', 'Personnel'), 'url' => ['/person/index']],
            ['label' => Yii::t('app', 'Items'), 'url' => ['/item/index']],
            ['label' => Yii::t('app', 'Buildings'), 'url' => ['/building/index/']],
            ['label' => Yii::t('app', 'Rooms'), 'url' => ['/room/index/']],
            [
                'label' => Yii::t('app', 'Logout'). ' (' . Yii::$app->user->identity->username . ')',
                'url' => ['/site/logout'],
                'linkOptions' => ['data-method' => 'post']
            ],
        ],
    ];
}

Upvotes: 1

Related Questions