yii2kartik-vsidenav

How to make active item of SideNav in another style?


I want the items in my SideNav by Kartik in the yii2 app to change the color when it is active(was clicked and open).

Sorry, I am pretty new for PHP and Yii and the question might be seen obvious but I really stack here.

I have already tried to use the "active" option that is explained in the documentation but it doesn't work. It doesn't show any error but is not working. I have a file adminMenu.php where the SideNav is written. and the panel.php view file where I showing it.

Also, I tried to add echo

$this->render('adminMenu'['currentPage'=>'admin/personal']);

but it shows error and thus I comment it for now.

adminMenu.php:

class adminMenu extends Widget{
    public function init(){
        $curentpage = Yii::$app->controller->id ;
        parent::init();
        ob_start();


    echo SideNav::widget([
        'type' => SideNav::TYPE_PRIMARY,
        'headingOptions' => ['class'=>'head-style'],
        'items' => [
            ['label' => 'Personal', 
             'url' => ['/admin/personal'], 
             'active' => ($curentpage == 'admin/personal')],

            ['label' => 'Clients', 
             'url' => ['/admin/clients'], 
             'active' => ($curentpage == 'admin/clients')],

           ...
    ]);

panel.php:

if(\Yii::$app->user->can('Admin')){
    echo adminMenu::widget();
    //echo $this->render('adminMenu'['currentPage'=>'admin/personal']);
}

Solution

  • i think that you mistake is in this line

    $curentpage = Yii::$app->controller->id;

    Yii::$app->controller->id only return the name of your controller , in this casi will be "admin" then you compare "admin" equals "controller/action" ('admin/personal') this never will be equals .

    To do this , you can do a concat the actual controller and the actual action like this :

    $curentpage = Yii::$app->controller->id.'/'.Yii::$app->controller->action->id;

    and the comparation will be success and the "active" class add to you sidebar