I'm using Bootstrap nav-tabs/dropdown menus component as my primary navigation bar but I cant figure out how to set the active menu based on an incoming URI.
There are a lot of different examples/posts on the net that use nav-tabs for hiding and displaying specific div content or working with the # symbol but I just want to read the incoming URI using PHP, the _SERVER["REQUEST_URI"] variable and set a tab active. Be it a nested location in the navigation or not is also a problem.
Here what I've been trying:
<ul class="nav nav-tabs" id="supernav">
<li class="active"><a href="/page1.html" data-toggle="tab"><i class="icon-home" style="margin-top:4px;"></i> Page 1</a></li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Page 2 <b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="/page2.html" data-toggle="tab">Home</a></li>
<li class="divider"></li>
<li><a href="/page2.2.html" data-toggle="tab">Page 2.2</a></li>
<li><a href="/page2.3.html" data-toggle="tab">Page 2.3</a></li>
</ul>
</li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Page 3 <b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="/page3.html" data-toggle="tab">Home</a></li>
<li class="divider"></li>
<li class="dropdown-submenu">
<a href="/page3.2.html" data-toggle="tab">Page 3.2</a>
<ul class="dropdown-menu">
<li><a href="/page3.2.1.html" data-toggle="tab">Page 3.2.1</a></li>
<li><a href="/page3.2.2.html" data-toggle="tab">Page 3.2.2</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="/page4.html" data-toggle="tab">Page 4</a></li>
</ul>
<script>
window.onload=function (e) {
e.preventDefault();
$('#supernav a[href="<?=$_SERVER["REQUEST_URI"];?>"]').tab('show');
};
</script>
Here are a couple URI examples:
http://abc.com/page1.html
http://abc.com/page2.3.html
http://abc.com/page3.2.2.html
Can anyone point me to a good example of how to accomplish this or am I just asking too much from this component?
NOTE: I've preloaded all the bootstrap and jquery resources in my header.
I'm a little late to the party but just came across this post and I figured I'd add my extra 2 cents...
Basically, the best method I've found to set the active bootstrap's tab/pill is by using Javascript/jQuery to match the current url to the href of the active link.
So if your menu is set up as the following:
<ul class="nav nav-tabs">
<li><a href="/page1.html" data-toggle="tab">Page 1</a></li>
<li><a href="/page2.html" data-toggle="tab">Page 2</a></li>
</ul>
Your jQuery will be:
$(document).ready(function() {
$('.nav-tabs a[href="'+location.href+'"]').parents('li').addClass('active');
});
This assumes absoulte path for the link's href, but that could be easily overriden by something like:
$(document).ready(function() {
var url_parts = location.href.split('/');
var last_segment = url_parts[url_parts.length-1];
$('.nav-tabs a[href="' + last_segment + '"]').parents('li').addClass('active');
});
Hope this helps somebody in the universe! :)
Cheers!