在SharePointServer 2010中,导航控件是网站用户界面的重要组成部分,它帮助用户在网站的不同部分之间进行导航。虽然SharePoint提供了一些标准的导航控件,但有时这些控件可能无法满足特定的需求。因此,开发者可能会选择创建自定义导航控件以提供更灵活的导航体验。本文将介绍一个自定义导航控件,它使用HTML列表标签来渲染导航节点,并且是从SharePoint Server 2007版本改进而来,以适应SharePoint Server 2010的使用。
这个自定义导航控件使用PortalSiteMapProvider来渲染导航节点。尽管SharePoint 2010版本的AspMenu控件支持使用UseSimpleRendering属性来输出HTML列表标签,但它在显示顶级节点和下级节点时仍然显得相当僵硬。为了解决这个问题,开发了这个自定义导航控件,它具有以下公共属性:
SiteMapProvider - PortalSiteMapProvider类型的站点地图提供者。默认值是CurrentNavigation。
StartNodeKey - 起始子站点的服务器相对URL。例如:/PressReleases/2010。默认值是根站点。
IncludeSubSites - 是否包含子站点?允许的值是True、False或PerWeb。默认值是PerWeb,即每个子站点的设置,可以在“网站操作”>“导航(外观和感觉)”中配置。
IncludePages - 是否包含页面?允许的值是True、False或PerWeb。默认值是PerWeb,即每个子站点的设置,可以在“网站操作”>“导航(外观和感觉)”中配置。
IncludeHeadings - 是否包含标题?允许的值是True或False。
IncludeAuthoredLinks - 是否包含作者链接?允许的值是True或False。
MaxLevels - 节点级别的最大数量。默认值是0,即没有限制。
CompactMode - 如果设置为True,则导航会展开顶级节点和当前节点的所有父节点。例如,如果Child1、Child2和Child3是顶级节点,那么在CompactMode为True的情况下,Child21和Child211(当前节点)会被展开。如果设置为False,则当前节点及其父节点的同级节点也会被显示。默认值是False。
ListCssClass - 最外层
NodeCssClass - 常规超链接节点的CSS类名。
CurrentNodeCssClass - 选中节点的CSS类名。
CurrentNodeParentCssClass - 选中节点下最低级别的节点的CSS类名。
NoUrlNodeCssClass - 没有URL的节点(如标题)的CSS类名。
此外,该控件还使用资源文件来存储所有消息和属性UI字符串。它展示了如何开发一个继承自CategoryAttribute或DescriptionAttribute的自定义类,并从自己的资源管理器返回本地化的字符串。
示例Visual Studio 2010解决方案包含了构建和部署此Web控件所需的所有支持文件,除了强名称密钥文件(key.snk)。它充分利用了内置的SharePoint集成。不再需要第三方工具或自定义的预构建和后构建脚本来构建SharePoint解决方案文件。
需要注意的是,该Web控件并不完全支持包含导航“标题”的网站层次结构,因为它们无法点击以展开子节点。然而,如果子节点是当前节点,导航将显示父标题。
安装
打开SharePoint 2010 Management Shell,使用Add-SPSolution命令添加解决方案文件QuestechNavigation.wsp,如下所示:
Add-SPSolution "C:\QuestechSystems.Navigation\bin\Release\QuestechNavigation.wsp"
或者使用stsadm命令添加解决方案文件QuestechNavigation.wsp,如下所示:
stsadm -o addsolution -filename "C:\QuestechSystems.Navigation\bin\Release\QuestechNavigation.wsp"
然后转到SharePoint 2010 Central Administration/System Settings/Manage farm solutions。将安装的解决方案部署到选定的Web应用程序。要将Web控件插入发布页面,请按照以下方式修改相应的母版页或页面布局:
<%@ Register Tagprefix="QuestechPublishingWebControls" Namespace="QuestechSystems.SharePoint.Publishing.WebControls" Assembly="QuestechSystems.SharePoint.Publishing.Navigation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=57d955ce9c425b79" %>
...
<QuestechPublishingWebControls:Navigation CompactMode="False" runat="server" />
...
历史