Inhaltsverzeichnis
yii2 左侧菜单子级无法高亮的问题,yii2菜单子
Heim php教程 php手册 yii2 左侧菜单子级无法高亮的问题,yii2菜单子

yii2 左侧菜单子级无法高亮的问题,yii2菜单子

Jun 13, 2016 am 08:40 AM
yii2 linke Seite 问题 hoch

yii2 左侧菜单子级无法高亮的问题,yii2菜单子

作者:白狼 出处:http://www.manks.top/question/20160508000001.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

前面我们写的文章yii2 rbac权限控制之菜单menu详细教程,很完美,也很实用,鉴于不少小伙伴咨询的问题,这里做一个统一的说明。我们先来看看具体问题。

添加角色是属于角色这个菜单的,如何在执行添加角色这个操作时让角色这个菜单处于选中状态呢?
adminlte左侧导航的Create,View等action不能定位到index的模块(左侧二级导航不能展开定位)
如果你是按照我们上文的教程来的,那接下来所要说明的问题应该不是问题,先来看看我们当时是怎么处理左侧菜单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进行了优化</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>?>
Nach dem Login kopieren

看到这里,我们不妨打开文件dmstr\widgets\Menu看看这里是怎么实现左侧菜单选中这一困扰众多同学的问题。

<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>
Nach dem Login kopieren

看吧,看上面的代码,也就是说左侧菜单激活的情况是当前路由完全等于菜单路由时菜单才进行激活。

鉴于我们一开始谈到的不少小伙伴疑惑的两个问题,我们这里只需要稍稍调整下代码,判断控制到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>......


        //改写了路由的规则,是否高亮判断到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>
Nach dem Login kopieren

大功告成,现在我们左侧的菜单引用的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>
Nach dem Login kopieren

 

快去试试看我们的问题解决没有吧。

menuyii2

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Lösen Sie das Problem „Fehler: Neudefinition der Klasse ‚Klassenname'', das im C++-Code auftritt Lösen Sie das Problem „Fehler: Neudefinition der Klasse ‚Klassenname'', das im C++-Code auftritt Aug 25, 2023 pm 06:01 PM

Lösen Sie das Problem „error:redefinitionofclass‘ClassName‘“ in C++-Code. Bei der C++-Programmierung treten häufig verschiedene Kompilierungsfehler auf. Einer der häufigsten Fehler ist „error:redefinitionofclass ‚ClassName‘“ (Neudefinitionsfehler der Klasse „ClassName“). Dieser Fehler tritt normalerweise auf, wenn dieselbe Klasse mehrmals definiert wird. Dieser Artikel wird

Probleme bei der Bewertung des Clustering-Effekts in Clustering-Algorithmen Probleme bei der Bewertung des Clustering-Effekts in Clustering-Algorithmen Oct 10, 2023 pm 01:12 PM

Das Problem der Clustering-Effektbewertung im Clustering-Algorithmus erfordert spezifische Codebeispiele. Clustering ist eine unbeaufsichtigte Lernmethode, die ähnliche Stichproben durch Clustering von Daten in eine Kategorie gruppiert. Bei Clustering-Algorithmen ist die Bewertung des Clustering-Effekts ein wichtiges Thema. In diesem Artikel werden mehrere häufig verwendete Indikatoren zur Bewertung des Clustering-Effekts vorgestellt und entsprechende Codebeispiele gegeben. 1. Clustering-Effekt-Bewertungsindex Silhouette-Koeffizient Der Silhouette-Koeffizient bewertet den Clustering-Effekt, indem er die Nähe der Stichprobe und den Grad der Trennung von anderen Clustern berechnet.

Was soll ich tun, wenn ich Steam unter Windows 10 nicht herunterladen kann? Was soll ich tun, wenn ich Steam unter Windows 10 nicht herunterladen kann? Jul 07, 2023 pm 01:37 PM

Steam ist eine sehr beliebte Spieleplattform mit vielen hochwertigen Spielen, aber einige Win10-Benutzer berichten, dass sie Steam nicht herunterladen können. Was ist los? Es ist sehr wahrscheinlich, dass die IPv4-Serveradresse des Benutzers nicht richtig eingestellt ist. Um dieses Problem zu lösen, können Sie versuchen, Steam im Kompatibilitätsmodus zu installieren und dann den DNS-Server manuell auf 114.114.114.114 ändern. Anschließend sollten Sie ihn später herunterladen können. Was tun, wenn Win10 Steam nicht herunterladen kann: Unter Win10 können Sie versuchen, es im Kompatibilitätsmodus zu installieren. Nach dem Update müssen Sie den Kompatibilitätsmodus deaktivieren, sonst wird die Webseite nicht geladen. Klicken Sie auf die Eigenschaften der Programminstallation, um das Programm im Kompatibilitätsmodus auszuführen. Starten Sie neu, um Speicher und Leistung zu erhöhen

Erfahren Sie, wie Sie häufige iPhone-Probleme diagnostizieren Erfahren Sie, wie Sie häufige iPhone-Probleme diagnostizieren Dec 03, 2023 am 08:15 AM

Das iPhone ist für seine leistungsstarke Leistung und seine vielseitigen Funktionen bekannt und ist nicht immun gegen gelegentliche Probleme oder technische Schwierigkeiten, ein häufiges Merkmal komplexer elektronischer Geräte. iPhone-Probleme können frustrierend sein, aber normalerweise ist kein Alarm erforderlich. In diesem umfassenden Leitfaden möchten wir einige der am häufigsten auftretenden Herausforderungen im Zusammenhang mit der iPhone-Nutzung entmystifizieren. Unser Schritt-für-Schritt-Ansatz soll Ihnen bei der Lösung dieser häufigen Probleme helfen und praktische Lösungen und Tipps zur Fehlerbehebung bieten, damit Ihre Geräte wieder einwandfrei funktionieren. Unabhängig davon, ob Sie mit einer Störung oder einem komplexeren Problem konfrontiert sind, kann Ihnen dieser Artikel dabei helfen, diese effektiv zu beheben. Allgemeine Tipps zur Fehlerbehebung Bevor wir uns mit den spezifischen Schritten zur Fehlerbehebung befassen, finden Sie hier einige hilfreiche Tipps

So lösen Sie das Problem, dass jQuery den Formularelementwert nicht abrufen kann So lösen Sie das Problem, dass jQuery den Formularelementwert nicht abrufen kann Feb 19, 2024 pm 02:01 PM

Um das Problem zu lösen, dass jQuery.val() nicht verwendet werden kann, sind spezifische Codebeispiele erforderlich. Für Front-End-Entwickler ist die Verwendung von jQuery eine der häufigsten Operationen. Unter diesen ist die Verwendung der .val()-Methode zum Abrufen oder Festlegen des Werts eines Formularelements eine sehr häufige Operation. In bestimmten Fällen kann jedoch das Problem auftreten, dass die Methode .val() nicht verwendet werden kann. In diesem Artikel werden einige gängige Situationen und Lösungen vorgestellt und spezifische Codebeispiele bereitgestellt. Problembeschreibung: Wenn Sie jQuery zum Entwickeln von Front-End-Seiten verwenden, treten manchmal Probleme auf

Beheben Sie den PHP-Fehler: Probleme beim Erben der übergeordneten Klasse Beheben Sie den PHP-Fehler: Probleme beim Erben der übergeordneten Klasse Aug 17, 2023 pm 01:33 PM

Beheben von PHP-Fehlern: Probleme bei der Vererbung übergeordneter Klassen In PHP ist die Vererbung ein wichtiges Merkmal der objektorientierten Programmierung. Durch Vererbung können wir vorhandenen Code wiederverwenden und ihn erweitern und verbessern, ohne den ursprünglichen Code zu ändern. Obwohl Vererbung in der Entwicklung weit verbreitet ist, können beim Erben von einer übergeordneten Klasse manchmal Fehler auftreten. Dieser Artikel konzentriert sich auf die Lösung häufiger Probleme, die beim Erben von einer übergeordneten Klasse auftreten, und stellt entsprechende Codebeispiele bereit. Frage 1: Die übergeordnete Klasse wird beim Erben der übergeordneten Klasse nicht gefunden, wenn dies nicht der Fall ist

Das Problem der Generalisierungsfähigkeit maschineller Lernmodelle Das Problem der Generalisierungsfähigkeit maschineller Lernmodelle Oct 08, 2023 am 10:46 AM

Die Generalisierungsfähigkeit von Modellen für maschinelles Lernen erfordert spezifische Codebeispiele. Da die Entwicklung und Anwendung von maschinellem Lernen immer weiter verbreitet wird, wird der Generalisierungsfähigkeit von Modellen für maschinelles Lernen immer mehr Aufmerksamkeit geschenkt. Die Generalisierungsfähigkeit bezieht sich auf die Vorhersagefähigkeit eines maschinellen Lernmodells anhand unbeschrifteter Daten und kann auch als Anpassungsfähigkeit des Modells in der realen Welt verstanden werden. Ein gutes Modell für maschinelles Lernen sollte über eine hohe Generalisierungsfähigkeit verfügen und in der Lage sein, genaue Vorhersagen für neue Daten zu treffen. In praktischen Anwendungen stoßen wir jedoch häufig auf Modelle, die im Trainingssatz gut funktionieren, im Testsatz oder in der Realität jedoch versagen

Problem beim Erwerb von Etiketten beim schwach überwachten Lernen Problem beim Erwerb von Etiketten beim schwach überwachten Lernen Oct 08, 2023 am 09:18 AM

Das Problem der Etikettenerfassung beim schwach überwachten Lernen erfordert spezifische Codebeispiele. Einführung: Schwach überwachtes Lernen ist eine Methode des maschinellen Lernens, die schwache Etiketten für das Training verwendet. Im Gegensatz zum herkömmlichen überwachten Lernen müssen beim schwach überwachten Lernen nur weniger Beschriftungen zum Trainieren des Modells verwendet werden, und nicht jede Probe muss über eine genaue Beschriftung verfügen. Beim schwach überwachten Lernen ist jedoch die Frage, wie aus schwachen Labels nützliche Informationen genau gewonnen werden können, ein zentrales Thema. In diesem Artikel wird das Problem der Etikettenerfassung beim schwach überwachten Lernen vorgestellt und spezifische Codebeispiele gegeben. Einführung in das Label-Akquisitionsproblem beim schwach überwachten Lernen:

See all articles