解決yii2左側菜單子級無法高亮問題的方法

來源:互聯網
上載者:User
我們先來看看具體問題。
添加角色是屬於角色這個菜單的,如何在執行添加角色這個操作時讓角色這個菜單處於選中狀態呢?
adminlte左側導航的Create,View等action不能定位到index的模組(左側二級導航不能展開定位)
如果你是按照我們上文的教程來的,那接下來所要說明的問題應該不是問題,先來看看我們當時是怎麼處理左側菜單menu的

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), ] ); ?>

看到這裡,我們不妨開啟檔案dmstr\widgets\Menu看看這裡是怎麼實現左側菜單選中這一困擾眾多同學的問題。

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;}

看吧,看上面的代碼,也就是說左側菜單啟用的情況是當前路由完全等於菜單路由時菜單才進行啟用。

鑒於我們一開始談到的不少小夥伴疑惑的兩個問題,我們這裡只需要稍稍調整下代碼,判斷控制到controller而非action即可,但是源碼檔案我們又不能修改,怎麼辦好呢?天熱,涼拌。

這裡我們拷貝dmstr\widgets\Menu.php檔案到backend\components\Menu.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檔案修改其指向到backend\components\Menu

use backend\components\Menu;echo Menu::widget([ 'options' => ['class' => 'sidebar-menu'], 'items' => MenuHelper::getAssignedMenu(Yii::$app->user->id, null, $callback),]); 

快去試試看我們的問題解決沒有吧。

以上就介紹瞭解決yii2左側菜單子級無法高亮問題的方法,包括了yii,的方法方面的內容,希望對PHP教程有興趣的朋友有所協助。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.