yii2の左メニューのサブレベルがハイライト表示されない問題の解決方法

WBOY
リリース: 2016-07-29 08:50:43
オリジナル
944 人が閲覧しました

まず具体的な問題を見てみましょう。
キャラクターの追加はキャラクターメニューに属します キャラクターを追加する操作を行うときにキャラクターメニューを選択するにはどうすればよいですか?
adminlte の左側のナビゲーションの作成、表示、その他のアクションでインデックス モジュールを見つけることができません (左側の 2 番目のナビゲーションを展開して配置することはできません)
上記のチュートリアルに従っている場合、次に説明する問題は発生しないはずです。問題です。まず、当時の左側のメニュー メニューの処理方法を見てみましょう

use mdm\admin\components\MenuHelper; 
<&#63;php 
$callback = function($menu){ 
 //鉴于篇幅有限,这里的代码省略,源码见于原文
}; 
//这里我们对一开始写的菜单menu进行了优化
echo dmstr\widgets\Menu::widget( [ 
 'options' => ['class' => 'sidebar-menu'], 
 'items' => MenuHelper::getAssignedMenu(Yii::$app->user->id, null, $callback), 
] ); ?>
ログイン後にコピー

これを見て、dmstrwidgetsMenu ファイルを開いて、多くの学生を悩ませる左側のメニュー選択の実装方法を確認するとよいでしょう。 。

protected function isItemActive($item)
{
 if (isset($item['url']) && is_array($item['url']) && isset($item['url'][0])) {
  //......
  if ($arrayRoute[0] !== $arrayThisRoute[0]) {
   return false;
  }
  if (isset($arrayRoute[1]) && $arrayRoute[1] !== $arrayThisRoute[1]) {
   return false;
  }
  if (isset($arrayRoute[2]) && $arrayRoute[2] !== $arrayThisRoute[2]) {
   return false;
  }
  //......
  return true;
 }
 return false;
}
ログイン後にコピー

ほら、上のコードを見てください。つまり、現在のルートがメニュー ルートと完全に等しい場合、左側のメニューがアクティブになります。

最初に話した、多くの友人が混乱していた 2 つの質問を考慮して、コントロールがアクションではなくコントローラーによって制御されるかどうかを判断するには、ここでコードを少し調整するだけで済みます。ただし、変更することはできません。ソースコードファイルはどうすればいいでしょうか?暑い時は冷やしてお召し上がりください。

ここで、dmstrwidgetsMenu.php ファイルを backendcomponentsMenu.php にコピーし、isItemActive メソッドを次のように変更します

protected function isItemActive($item)
{
 if (isset($item['url']) && is_array($item['url']) && isset($item['url'][0])) {
  
  //......


  //改写了路由的规则,是否高亮判断到controller而非action
  $routeCount = count($arrayRoute);
  if ($routeCount == 2) {
   if ($arrayRoute[0] !== $arrayThisRoute[0]) {
    return false;
   }
  } elseif ($routeCount == 3) {
   if ($arrayRoute[0] !== $arrayThisRoute[0]) {
    return false;
   }
   if (isset($arrayRoute[1]) && $arrayRoute[1] !== $arrayThisRoute[1]) {
    return false;
   }
  } else {
   return false;
  }


  // if ($arrayRoute[0] !== $arrayThisRoute[0]) {
  //  return false;
  // }
  // if (isset($arrayRoute[1]) && $arrayRoute[1] !== $arrayThisRoute[1]) {
  //  return false;
  // }
  // if (isset($arrayRoute[2]) && $arrayRoute[2] !== $arrayThisRoute[2]) {
  //  return false;
  // }
  
  //......
  
  return true;
 }
 return false;
}
ログイン後にコピー

これで、左側のメニューによって参照される Menu ファイルのポイントが backendcomponentsMenu に変更されます

use backend\components\Menu;
echo Menu::widget([
 'options' => ['class' => 'sidebar-menu'],
 'items' => MenuHelper::getAssignedMenu(Yii::$app->user->id, null, $callback),
]); 
ログイン後にコピー

急いで試してみて、問題が解決するかどうかを確認してください。

以上、yii2の左メニューのサブレベルがハイライト表示されない問題を解決する方法をyiiの方法も含めて紹介しました。PHPチュートリアルに興味のある友人の参考になれば幸いです。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート