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