Skip to content

Instantly share code, notes, and snippets.

@bdukes
Created June 1, 2014 18:37
Show Gist options
  • Save bdukes/2e311c44d77dfc8d5e8f to your computer and use it in GitHub Desktop.
Save bdukes/2e311c44d77dfc8d5e8f to your computer and use it in GitHub Desktop.
DNN DDR Razor menu template with level checking
@using DotNetNuke.Web.DDRMenu;
@using System.Dynamic;
@inherits DotNetNuke.Web.Razor.DotNetNukeWebPage<dynamic>
@helper RenderNodes(IEnumerable<MenuNode> nodes, int level)
{
if (nodes.Any())
{
var dropdown = level == 0 ? "nav navbar-nav" : "dropdown-menu";
var topLevelId = level == 0 ? Model.ControlID : null;
<ul id="@topLevelId" class="@dropdown">
@foreach (var node in nodes)
{
var cssClasses = new List<string> { "level-" + level };
if (node.HasChildren())
{
if (level == 0) { cssClasses.Add("dropdown"); } else { cssClasses.Add("dropdown-submenu"); }
}
cssClasses.Add("node-" + node.TabId);
if (node.Selected) { cssClasses.Add("active"); }
var classes = new HtmlString((cssClasses.Count == 0) ? null : string.Join(" ", cssClasses)));
<li class="@classes">
@if (node.HasChildren())
{
if (level == 0)
{
if (node.Enabled)
{
<a href="@node.Url" target="@node.Target" class="dropdown-toggle" >@node.Text <b class="caret"></b></a>
}
else
{
<a class="dropdown-toggle">@node.Text <b class="caret"></b></a>
}
}
else
{
<a href="@node.Url" target="@node.Target">@node.Text <b class="caret"></b></a>
}
@RenderNodes(node.Children, level + 1)
}
else if (node.Enabled)
{
<a href="@node.Url" target="@node.Target">@node.Text</a>
}
else
{
@node.Text
}
</li>
}
</ul>
}
}
<div class="nav-wrap">
@RenderNodes(Model.Source.root.Children, 0)
</div>
Copy link

ghost commented Sep 20, 2014

Hi, I have tried to use this template but menu doesn't show. Actually when I add just "int level" it doesn't show. I use dnn 7.2.2. What can be wrong? I am trying to render ul/li for sub items and set classes to them.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment