yii2 左側(cè)菜單子級無法高亮的問題,yii2菜單子_PHP教程
Jul 12, 2016 am 08:53 AMyii2 左側(cè)菜單子級無法高亮的問題,yii2菜單子
作者:白狼 出處:http://www.manks.top/question/20160508000001.html?本文版權(quán)歸作者,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利。
前面我們寫的文章yii2 rbac權(quán)限控制之菜單menu詳細(xì)教程,很完美,也很實用,鑒于不少小伙伴咨詢的問題,這里做一個統(tǒng)一的說明。我們先來看看具體問題。
添加角色是屬于角色這個菜單的,如何在執(zhí)行添加角色這個操作時讓角色這個菜單處于選中狀態(tài)呢?
adminlte左側(cè)導(dǎo)航的Create,View等action不能定位到index的模塊(左側(cè)二級導(dǎo)航不能展開定位)
如果你是按照我們上文的教程來的,那接下來所要說明的問題應(yīng)該不是問題,先來看看我們當(dāng)時是怎么處理左側(cè)菜單menu的
<span>use</span><span> mdm\admin\components\MenuHelper; </span><?<span>php </span><span>$callback</span> = <span>function</span>(<span>$menu</span><span>){ </span><span>//</span><span>鑒于篇幅有限,這里的代碼省略,源碼見于原文</span> <span>}; </span><span>//</span><span>這里我們對一開始寫的菜單menu進(jìn)行了優(yōu)化</span> <span>echo</span> dmstr\widgets\Menu::<span>widget( [ </span>'options' => ['class' => 'sidebar-menu'], 'items' => MenuHelper::getAssignedMenu(Yii::<span>$app</span>->user->id, <span>null</span>, <span>$callback</span>),<span> ] ); </span>?>
看到這里,我們不妨打開文件dmstr\widgets\Menu看看這里是怎么實現(xiàn)左側(cè)菜單選中這一困擾眾多同學(xué)的問題。
<span>protected</span> <span>function</span> isItemActive(<span>$item</span><span>) { </span><span>if</span> (<span>isset</span>(<span>$item</span>['url']) && <span>is_array</span>(<span>$item</span>['url']) && <span>isset</span>(<span>$item</span>['url'][0<span>])) { </span><span>//</span><span>......</span> <span>if</span> (<span>$arrayRoute</span>[0] !== <span>$arrayThisRoute</span>[0<span>]) { </span><span>return</span> <span>false</span><span>; } </span><span>if</span> (<span>isset</span>(<span>$arrayRoute</span>[1]) && <span>$arrayRoute</span>[1] !== <span>$arrayThisRoute</span>[1<span>]) { </span><span>return</span> <span>false</span><span>; } </span><span>if</span> (<span>isset</span>(<span>$arrayRoute</span>[2]) && <span>$arrayRoute</span>[2] !== <span>$arrayThisRoute</span>[2<span>]) { </span><span>return</span> <span>false</span><span>; } </span><span>//</span><span>......</span> <span>return</span> <span>true</span><span>; } </span><span>return</span> <span>false</span><span>; }</span>
看吧,看上面的代碼,也就是說左側(cè)菜單激活的情況是當(dāng)前路由完全等于菜單路由時菜單才進(jìn)行激活。
鑒于我們一開始談到的不少小伙伴疑惑的兩個問題,我們這里只需要稍稍調(diào)整下代碼,判斷控制到controller而非action即可,但是源碼文件我們又不能修改,怎么辦好呢?天熱,涼拌。
這里我們拷貝dmstr\widgets\Menu.php文件到backend\components\Menu.php,然后按照下面的方法修改isItemActive方法即可
<span>protected</span> <span>function</span> isItemActive(<span>$item</span><span>) { </span><span>if</span> (<span>isset</span>(<span>$item</span>['url']) && <span>is_array</span>(<span>$item</span>['url']) && <span>isset</span>(<span>$item</span>['url'][0<span>])) { </span><span>//</span><span>...... //改寫了路由的規(guī)則,是否高亮判斷到controller而非action</span> <span>$routeCount</span> = <span>count</span>(<span>$arrayRoute</span><span>); </span><span>if</span> (<span>$routeCount</span> == 2<span>) { </span><span>if</span> (<span>$arrayRoute</span>[0] !== <span>$arrayThisRoute</span>[0<span>]) { </span><span>return</span> <span>false</span><span>; } } </span><span>elseif</span> (<span>$routeCount</span> == 3<span>) { </span><span>if</span> (<span>$arrayRoute</span>[0] !== <span>$arrayThisRoute</span>[0<span>]) { </span><span>return</span> <span>false</span><span>; } </span><span>if</span> (<span>isset</span>(<span>$arrayRoute</span>[1]) && <span>$arrayRoute</span>[1] !== <span>$arrayThisRoute</span>[1<span>]) { </span><span>return</span> <span>false</span><span>; } } </span><span>else</span><span> { </span><span>return</span> <span>false</span><span>; } </span><span>//</span><span> 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; // } //......</span> <span>return</span> <span>true</span><span>; } </span><span>return</span> <span>false</span><span>; }</span>
大功告成,現(xiàn)在我們左側(cè)的菜單引用的Menu文件修改其指向到backend\components\Menu
<span>use</span><span> backend\components\Menu; </span><span>echo</span> Menu::<span>widget([ </span>'options' => ['class' => 'sidebar-menu'], 'items' => MenuHelper::getAssignedMenu(Yii::<span>$app</span>->user->id, <span>null</span>, <span>$callback</span>),<span> ]); </span>
?
快去試試看我們的問題解決沒有吧。
menuyii2

熱AI工具

Undress AI Tool
免費脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

聚類演算法中的聚類效果評估問題,需要具體程式碼範(fàn)例聚類是一種無監(jiān)督學(xué)習(xí)方法,透過對資料進(jìn)行聚類,將相似的樣本歸為一類。在聚類演算法中,如何評估聚類的效果是一個重要的問題。本文將介紹幾種常用的聚類效果評估指標(biāo),並給出對應(yīng)的程式碼範(fàn)例。一、聚類效果評估指標(biāo)輪廓係數(shù)(SilhouetteCoefficient)輪廓係數(shù)是透過計算樣本的緊密度和與其他簇的分離度來評估聚類效

iPhone以其強大的性能和多方面的功能而聞名,它不能倖免於偶爾的打嗝或技術(shù)困難,這是複雜電子設(shè)備的共同特徵。遇到iPhone問題可能會讓人感到沮喪,但通常不需要警報。在這份綜合指南中,我們旨在揭開與iPhone使用相關(guān)的一些最常遇到的挑戰(zhàn)的神秘面紗。我們的逐步方法旨在幫助您解決這些常見問題,提供實用的解決方案和故障排除技巧,讓您的裝置恢復(fù)到最佳工作狀態(tài)。無論您是面對一個小故障還是更複雜的問題,本文都可以幫助您有效地解決這些問題。一般故障排除提示在深入研究具體的故障排除步驟之前,以下是一些有助於

解決C++程式碼中出現(xiàn)的「error:redefinitionofclass'ClassName'」問題在C++程式設(shè)計中,我們常常會遇到各種各樣的編譯錯誤。其中一個常見的錯誤是「error:redefinitionofclass'ClassName'」(類別『ClassName』的重定義錯誤)。這個錯誤通常出現(xiàn)在同一個類別被定義了多次的情況下。本文將

如龍8酒類大師考試所涉及的問題包括哪些?對應(yīng)的答案是什麼?如何快速通過考試?酒類大師考試活動有許多需要回答的問題,我們可以參考答案來解決。這些問題都牽涉到酒的知識。如果需要參考,讓我們一起來看看如龍8酒類大師考試問題答案的詳細(xì)解析!如龍8酒類大師考試問題答案詳解1、關(guān)於「酒」的問題。這是一種管由王室建立的蒸餾灑廠生產(chǎn)的蒸餾酒,以夏威夷大量種植的甘盤的糖分為原料釀製。請問這種酒叫什麼?答:蘭姆酒2、關(guān)於「酒」的問題。圖片上是一種使用乾琴灑和乾苦艾酒調(diào)配而成的酒。它的特點是加入了橄欖,被譽為「雞尼酒

Steam是十分受歡迎的一個平臺遊戲,擁有眾多優(yōu)質(zhì)遊戲,可是有些win10用戶體現(xiàn)自己下載不了steam,這是怎麼回事呢?極有可能是用戶的ipv4伺服器位址沒有設(shè)定好。要解決這個問題的話,你可以試著在相容模式下安裝Steam,隨後手動修改一下DNS伺服器,將其改成114.114.114.114,以後應(yīng)當(dāng)就能下載了。 win10下載不了steam怎麼辦:WIn10下能夠試著相容模式下安裝,更新後必須關(guān)掉相容模式,不然網(wǎng)頁將無法載入。點擊程式安裝的屬性,以相容模式運作運行這個程式。重啟以增加內(nèi)存,電

解決jQuery.val()無法使用的問題,需要具體程式碼範(fàn)例對於前端開發(fā)者,使用jQuery是常見的操作之一。其中,使用.val()方法來取得或設(shè)定表單元素的值是非常常見的操作。然而,在一些特定的情況下,可能會出現(xiàn)無法使用.val()方法的問題。本文將介紹一些常見的情況以及解決方案,並提供具體的程式碼範(fàn)例。問題描述在使用jQuery開發(fā)前端頁面時,有時候會碰

解決PHP報錯:繼承父類別時遇到的問題在PHP中,繼承是重要的物件導(dǎo)向程式設(shè)計的特性。透過繼承,我們能夠重複使用現(xiàn)有的程式碼,並且能夠在不修改原有程式碼的情況下,對其進(jìn)行擴展和改進(jìn)。儘管繼承在開發(fā)中應(yīng)用廣泛,但有時在繼承父類別時可能會遇到一些報錯問題,本文將圍繞解決繼承父類別時遇到的常見問題進(jìn)行討論,並提供相應(yīng)的程式碼範(fàn)例。問題一:未找到父類別在繼承父類別的過程中,如果系統(tǒng)無

弱監(jiān)督學(xué)習(xí)中的標(biāo)籤獲取問題,需要具體程式碼範(fàn)例引言:弱監(jiān)督學(xué)習(xí)是一種利用弱標(biāo)籤進(jìn)行訓(xùn)練的機器學(xué)習(xí)方法。與傳統(tǒng)的監(jiān)督學(xué)習(xí)不同,弱監(jiān)督學(xué)習(xí)只需利用較少的標(biāo)籤來訓(xùn)練模型,而不是每個樣本都需要有準(zhǔn)確的標(biāo)籤。然而,在弱監(jiān)督學(xué)習(xí)中,如何從弱標(biāo)籤中準(zhǔn)確地獲取有用的信息是一個關(guān)鍵問題。本文將介紹弱監(jiān)督學(xué)習(xí)中的標(biāo)籤獲取問題,並給出具體的程式碼範(fàn)例。弱監(jiān)督學(xué)習(xí)中的標(biāo)籤獲取問題簡介:
