Skip to content

Instantly share code, notes, and snippets.

@rbaty-barr
Last active August 24, 2017 18:25
Show Gist options
  • Save rbaty-barr/a0c68d38473b8338e4b57720427c4e25 to your computer and use it in GitHub Desktop.
Save rbaty-barr/a0c68d38473b8338e4b57720427c4e25 to your computer and use it in GitHub Desktop.
bootstrap v4 basic navigation script for umbraco
@inherits Umbraco.Web.Mvc.UmbracoTemplatePage
@{
var homeActive = "active";
var homeUrl = @Model.Content.AncestorOrSelf(1);
}
<nav class="navbar navbar-expand-lg navbar-light bg-light" id="mainNav">
<button type="button" class="navbar-toggler w-100 border-0 text-left" data-toggle="collapse" data-target="#ba-nav" aria-controls="ba-nav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span> Menu
</button>
<div class="collapse navbar-collapse" id="ba-nav">
<ul class="navbar-nav mr-auto">
<li class="nav-item @if(@Model.Content.Id == 1054 || @Model.Content.Id== 1844){@Html.Raw(@homeActive)}"><a href="@homeUrl.Url" class="nav-link"><i class="fa fa-home"></i> @Umbraco.Field("#Home")</a></li>
@traverse(@homeUrl)
</ul>
</div>
</div>
</nav>
@helper subNodes(IPublishedContent node)
{
var items = node.Children.Where(x => x.IsVisible());
<div class="dropdown-menu" aria-labelledby="navDrop-@node.Id">
@foreach (var item in items)
{
var selected = Model.Content.Path.Contains(@item.Id.ToString()) ? "active" : "";
var navText = item.HasValue("navText") ? item.GetPropertyValue("navText") : item.Name;
<a class="dropdown-item" href="@item.Url">
@Html.Raw(@navText)
</a>
}
</div>
}
@helper traverse(IPublishedContent node)
{
var maxLevelForSitemap = 2;
var items = node.Children.Where("Visible").Where("Level <= " + maxLevelForSitemap);
if (items.Any())
{
foreach (var item in items)
{
var selected = Model.Content.Path.Contains(@item.Id.ToString()) ? "active" : null;
var dropdown = item.Children().Where("Visible").Count() > 0 ? "dropdown" : "";
<li class="nav-item @(selected) @(dropdown)">
@if(@item.Children().Where("Visible").Count() > 0 ){
<a class="nav-link dropdown-toggle" href="#" id="navDrop-@(item.Id)" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
@if(@item.HasValue("navText")){
@Html.Raw(@item.GetPropertyValue("navText"))
} else {
@Html.Raw(@item.Name)
}
</a>
@subNodes(item)
} else {
<a href="@item.Url" class="nav-link">
@if(@item.HasValue("navText")){
@Html.Raw(@item.GetPropertyValue("navText"))
} else {
@item.Name
}
</a>
}
</li>
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment