2016-12-17 6 views
1

私はKartikのSideNav(http://demos.krajee.com/sidenav-demo/profile/default)を正しく動作させるために、コントローラ/アクションのURLを設定していますが、アクティブなオプションを設定してメニューを開いたままにして正しいメニュー項目が選択されたままになります。Yii2 Kartik SideNavアクティブなオプションを設定する方法

'アクティブ' => 'コントローラ/アクション/デフォルト#デモ'と同様に、 'アクティブ' => 'コントローラ/アクション'(下記参照)を設定しようとしましたが、役に立たないです。私はそれを 'employee/employee-dashboard/default#demo'として設定すると、そのタブで同じ方法で他のタブを強調表示しますが、他のタブは変更しません。オリジナルは 'アクティブ' => 'ホーム'に設定されていましたが、それはただのアクションだと思いますが、それは私にとってもうまくいきませんでした。

  $type = SideNav::TYPE_DEFAULT; 
      $heading = '<i class="glyphicon glyphicon-cog"></i> Employee Menu'; 
      $item = '/employee/employee-dashboard/default#demo'; 

echo SideNav::widget([ 
       'type' => $type, 
       'encodeLabels' => false, 
       'heading' => $heading, 
       'items' => [ 
        // Important: you need to specify url as 'controller/action', 
        // not just as 'controller' even if default action is used. 
        // 
        // NOTE: The variable `$item` is specific to this demo page that determines 
        // which menu item will be activated. You need to accordingly define and pass 
        // such variables to your view object to handle such logic in your application 
        // (to determine the active status). 
        // 
        ['label' => 'Dashboard', 'icon' => 'home', 'url' => Url::to(['/employee/employee-dashboard', 'type'=>$type]), 'active' => ($item == '/employee/employee-dashboard/default#demo')] 

        ['label' => 'Paycheck Info', 'icon' => 'book', 'items' => [ 
         ['label' => '<span class="pull-right badge">10</span> W2 Forms', 'url' => Url::to(['/employee/w2-form', 'type'=>$type]), 'active' => ($item == 'w2-form')], 
+0

ちょっとした説明が必要です。メニュー行(ドロップダウンメニュー)を「アクティブ」に設定したい場合は、すべての子と一緒に開いておく必要がありますか? –

+0

はい。適切な操作については、デモページ(http://demos.krajee.com/sidenav-demo/profile/default)を参照してください。現在、どのメニュー項目もクリックすると正しいページに移動しますが、メニュー項目は強調表示されず、子メニューを含む展開メニューの場合はメニューが閉じます。ありがとう。 – Marko

答えて

1
'active'=>($item == 'about') 

where 
    $item = Yii::$app->controller->action->id; 


This is how i used 

<?php 

    $item = Yii::$app->controller->action->id; 
    echo SideNav::widget([ 
     'type' => SideNav::TYPE_DEFAULT, 
     'heading' => 'Options', 
     'items' => [ 
      [ 
       'url' => Yii::$app->homeUrl, 
       'label' => 'Home', 
       'icon' => 'home', 
       'active'=>($item == 'index') 
      ], 
      [ 
       'label' => 'Help', 
       'icon' => 'question-sign', 
       'items' => [ 
        ['label' => 'About', 'icon'=>'info-sign', 'url'=>Yii::$app->homeUrl.'site/about', 'active'=>($item == 'about')], 
        ['label' => 'Contact', 'icon'=>'phone', 'url'=>Yii::$app->homeUrl.'site/contact', 'active'=>($item == 'contact')], 
       ], 
      ], 
     ], 
    ]); 
?> 
+0

ありがとう!これは、非常にエレガントなソリューションで、多くのページのレイアウトファイルから使用できます。私が見つけた唯一の解決策(ほんの数分前)は、私は以下に投稿し、個々のページでそれを使用するように強制します。 – Marko

0

一つの解決策は、私はあなたがページごとにアクティブなメニュー項目を設定する場合であるが見つかりました:

だけSideNavウィジェットで(例えばsidemenu.php)別のビューファイルを作成します。これは 'currentPage'というパラメータを受け取ります。

echo SideNav::widget([ 
    'type' => SideNav::TYPE_DEFAULT, 
    'heading' => 'Options', 
    'items' => [ 
     [ 
      'url' => Url::toRoute('/site/index'), 
      'label' => 'Home', 
      'icon' => 'file', 
      'active'=>($currentPage == 'home'), 
     ], 
     [ 
      'url' => Url::toRoute('/site/about'), 
      'label' => 'About', 
      'icon' => 'file', 
      'active'=>($currentPage == 'about'), 
     ], 

は、その後、あなたがメニューをレンダリングするビューページでは、currentPageプロパティ設定 - 例えば:

echo $this->render('sidemenu', ['currentPage'=>'home']); 

または エコーをます$ this->( 'sidemenu' をレンダリングし、[」 currentPage '=>' about ']);

関連する問題