Die aktuelle Version 02.00.01 des DDRMenu für DotNetNuke (Standard Menu seit DNN 6) enthält einen schlimmen Bug: Unter Umständen werden Unterseiten von versteckten Seiten nicht dargestellt. Unter Umständen meint folgendes:
- Ein Menü zeigt die Unterseiten (Level 2) der Hauptseiten (Level 1) über NodeSelector=“RootChildren“ oder „+0“ an
- Mindestens eine Seite ist so konfiguriert, nicht im Menü dargestellt zu werden (Seiteneinstellungen)
- Seite bei Punkt 2 hat Unterseiten
Problem
Alle Unterseiten einer versteckten Seite werden im Menü nicht angezeigt. Dieser Fehler ist im Issue Tracker des DDR Menü eingetragen, aber noch nicht behoben: http://dnnddrmenu.codeplex.com/workitem/11402
Da wir täglich mit DotNetNuke arbeiten, brauchten wir auch für dieses Problem eine Lösung. Und hier ist sie:
Lösung
Um den Fehler zu umgehen, gingen wir folgendermassen vor:
Davon ausgehend, dass das DDR Menü Seiten fälschlicherweise als versteckt behandelt, haben wir es zuerst so konfiguriert, dass alle versteckten Seiten ebenfalls dargestellt werden. Anschliessend haben wir das DDR Menü Template so angepasst, dass Seiten, die als versteckt gekennzeichnet sind, nicht mehr angezeigt werden. Damit haben wir selbst die Kontrolle darüber, welche Tabs angezeigt werden und welche nicht.
Schritt 1: Versteckte Tabs im Menü anzeigen
Über die Konfiguration des DDR Menüs lassen sich versteckte Tabs / Seiten im Menü anzeigen. Dazu setzt man den Parameter „IncludeHidden“ auf True. Mehr Informationen zur Konfiguration hier: http://www.dotnetnuke.com/Resources/Wiki/Page/DDRMenu-reference-guide.aspx
Schritt 2: DDR Menü Template anpassen
Voraussetzung dafür ist, dass man ein Razor Template (.cshtml) verwendet. Im Standard Razor Template findet sich folgende Schlaufe:
@foreach (var node in nodes) {
…
}
Alles innerhalb dieser Schlaufe muss nun in folgende Bedingung gepackt werden:
if(new TabController().GetTab(node.TabId, DotNetNuke.Entities.Portals.PortalSettings.Current.PortalId, false).IsVisible)
{
//… Code innerhalb dieser Bedinung wird nur ausgeführt, wenn die Bedinung wahr ist
}
Zuoberst in der .cshtml Datei muss folgendes noch angefügt werden:
@using DotNetNuke.Entities.Tabs;
Damit wird das Problem umgangen und die Unterseiten einer versteckten Seite werden korrekt dargestellt.
Ich hoffe, ich konnte dir hiermit helfen! Ansonsten schreib mir ein E-Mail auf
geeks@2sic.com
Liebe Grüsse
Raphael