最近有个项目,总体构架设计如:首先有一个clients网站,然后clients下面有很多client网站,每个client下面又会有很多brands(品牌)。当用户进入brand网站时,发现一个奇怪的现象:左边导航不仅显示当前client下的所有brand,同时也显示其他client下面的brand连接,不知道这是不是sharepoint的bug。我想可能MS就这么设计的。你会发现,我选择的网站是:Pfizer下面的Aricept,但Wyndham下面的所有brands也被展开了
这种情况,客户不希望的。客户希望只想展开当前被选中的client。
开发困惑:我想既然是导航,我可以尝试重新写 SPNavigationPriver ,PortalSiteMap, SiteMap atc...,我发了几个小时徒劳无功,后来我想到JS,但是用JS不知道如何下手。正在困惑中,我突然想到JQuery,虽然这个技术很早就出现了,但一直没有机会去尝试。于是查查资料,终于通过JQuery解决了这个问题。
解决步骤如下:
首先去下载JQuery,然后拷贝它到_layouts/JQuery文件夹(没有Jquery,创建一个)然后编辑Master page,找到</form> 标记,然后把下面code加入到这个标记上面。
Code
1)copy JQuery.js into 12\TEMPLATE\LAYOUTS\JQuery foler
2)add below sections into master page:
<script type="text/javascript" src="/_layouts/JQuery/jquery.js"></script>
<script type="text/javascript">
$("table.ms-navSubMenu2").each(function(){
var objCrumb =$("td").filter(".ms-pagebreadcrumb");
var crumValue = objCrumb.text();
//Find any navigation items under the sub menu that have been selected.
var selectedNavItems = $(this).find("a.ms-selectednav");
//Find the corresponding navigation header of the current sub menu being processed
var menuHeader = $(this).parents("tr:eq(0)").prev("tr").find("table.ms-navheader:eq(0)");
if ($(menuHeader).hasClass("ms-selectednavheader") || selectedNavItems.length > 0)
{
//if the navigation header for this sub menu is selected or if there are any
//selected navigational items in this submenu, show the submenu.
$(this).show();
}
else
{
if(crumValue !=null && crumValue.length>0)
{
if(crumValue.split('>').length>3)
{
$(this).hide();// hide the submenu
}
}
}
});
</script>
OK,再次打开网站,你会发现上面的问题被解决了
本技术参考: http://www.deviantpoint.com/post/2009/01/16/Creating-an-accordion-style-SharePoint-Quick-Launch-menu-with-jQuery.aspx