转:http://msdn.microsoft.com/zh-cn/library/bb897657(v=office.14).aspx
您可以在母版页的 XML 中声明导航的水平和垂直菜单说明。可以使用以下两个类来设置导航:PortalSiteMapDataSource 和 PortalSiteMapProvider。
PortalSiteMapProvider 对象提供了站点层次结构(导航结构)并监视节点之间的关系。PortalSiteMapDataSource 对象从 PortalSiteMapProvider 映射导航功能并筛选导航元素,以确定在水平或垂直菜单或者痕迹导航中显示哪些导航元素。
当您首次创建一个包含根站点(或首要网站)、多个网站、网页和作为首要网站的子站点的其他站点的站点结构时,Microsoft SharePoint Server 2010 将创建两个菜单:水平(顶部)菜单和垂直(左侧)菜单。
水平和垂直菜单是在母版页标记中声明的。以下是声明水平菜单的示例。
<SharePoint:AspMenu ID="GlobalNav" Runat="server" DataSourceID="GlobalNavDataSource" Orientation="Horizontal" StaticDisplayLevels="1" MaximumDynamicDisplayLevels="1" />
垂直菜单与水平菜单的声明方式类似,但使用的属性不同。这些属性与 ASP.NET Menu 控件上可用的属性相同。
表 1 介绍默认情况下在水平菜单和垂直菜单的母版页标记中所包含的属性。
属性 |
说明 |
---|---|
指定提供此菜单的分层数据的数据源控件。在前面的示例代码中,DataSourceID 指向 ID 为 GlobalNavDataSource 的控件。 |
|
指定菜单是水平菜单还是垂直菜单。在前面的示例代码中,方向为水平。 |
|
指定在菜单中同时显示的层次结构级别数。 在本示例中,将指定 1,表示菜单将在首要网站下显示一级层次结构。 |
|
指定在动态(弹出)菜单中显示的级别数。 在本示例中,将指定 1,表示网站层次结构的第一个级别上包含子网站或网页的菜单项将在动态菜单中显示这些网站或网页。 |
PortalSiteMapDataSource 是特定于 SharePoint Server 2010 的数据源,它从 PortalSiteMapProvider 对象检索数据并根据 ASP.NET 分层数据源接口公开数据。PortalSiteMapDataSource 对象指定其将用于通过 ASP.NETSiteMapProvider 属性来检索数据的 PortalSiteMapProvider 对象的名称。
如果母版页标记包含 DataSourceID="GlobalNavDataSource" 属性,则应用程序将返回一个 PortalSiteMapDataSource 对象。
<PublishingNavigation:PortalSiteMapDataSource ID="GlobalNavDataSource" Runat="server" SiteMapProvider="CombinedNavSiteMapProvider" ShowStartingNode="false" StartFromCurrentNode="true" StartingNodeOffset="0" TrimNonCurrentTypes="Heading" TreatStartingNodeAsCurrent="true" />
属性 |
说明 |
---|---|
影响数据源是否返回开始节点。 此属性设置为 true 时,数据源将返回开始节点。菜单将接收开始节点(该节点可以是根节点)和开始节点下方的项目。 此属性设置为 false 时,数据源不会返回开始节点。菜单只接收开始节点下方的项目。 |
|
影响数据源的开始位置。此属性设置数据源控件将向菜单返回整个站点层次结构的哪个部分。 当此属性设置为 true 时,SharePoint Server 2010 将指示 PortalSiteMapDataSource 对象应用其规则来确定开始位置。 |
|
获取或设置一个偏离于开始节点的正整数或负整数,它决定了由 DataSourceControl 对象公开的首要网站层次结构。 默认值为 0,表示由 SiteMapDataSource 对象公开的首要网站层次结构与开始节点相同。 此属性的影响效果是变化、不确定的,具体取决于站点层次结构详细信息,这些内容不在本主题的讨论范围内。 |
|
启用基于上下文的节点修整和基于类型的节点修整。 在本示例中,TrimNonCurrentTypes="Heading" 指示数据源删除并非直接位于当前节点之下且类型为 Heading 的所有节点。 您可以在以逗号分隔的列表中指定此属性的多个值。NodeTypes 枚举中定义了可用的值。 |
|
修整并非直接位于当前站点或它的某个上级站点之下的任何指定类型。 |
|
修整并非位于当前站点或它的某个上级或下级站点之下的任何指定类型。 |
|
影响将哪个节点作为当前节点进行修整。默认情况下,当前节点 是指表示当前所访问项目的节点。 当 TreatStartingNodeAsCurrent 设置为 true 时,数据源的开始节点将作为上下文节点或修整节点。 |
PortalSiteMapProvider 对象是分层导航数据的真正来源,它为 PortalSiteMapDataSource 对象提供数据。PortalSiteMapProvider 从 Microsoft SharePoint Foundation 2010SPNavigation 存储区检索节点。您可以使用 SPNavigation 对象创建静态链接和分组。提供静态链接和分组之后,应用程序会将表示网站和网页的动态项目与静态链接和分组合并。SharePoint Server 2010 会同时应用安全修整,使用户只看到他们具有浏览权限的导航项目。
在应用程序的 web.config 文件中声明已命名的提供程序,以使他们可供广泛使用。下面的代码演示了两个最重要的 PortalSiteMapProvider 对象(CombinedNavSiteMapProvider 和 CurrentNavSiteMapProvider)的声明。
<add name="CombinedNavSiteMapProvider" description="MOSS 2007 provider for Combined navigation" Type="Microsoft.SharePoint.Publishing.Navigation.PortalSiteMapProvider" NavigationType="Combined" EncodeOutput="true"> <add name="CurrentNavSiteMapProvider" description="MOSS 2007 provider for Current navigation" Type="Microsoft.SharePoint.Publishing.Navigation.PortalSiteMapProvider" NavigationType="Current" EncodeOutput="true" />
注释 |
---|
第一个提供程序的名称为 CombinedNavSiteMapProvider,它与为 SiteMapProvider 属性指定的值相匹配。这表示将创建水平菜单。 |
表 3 介绍了一些更为常见的 PortalSiteMapProvider 属性。
属性 |
说明 |
---|---|
获取或设置此导航提供程序的导航类型。可用的选项包括 Combined、Current 和 Global,并且它们的行为由以下三个属性指定:CombinedNavSiteMapProvider、CurrentSiteMapProvider 和 CurrentSiteNavSiteMapProviderNoEncode。 |
|
获取默认连接到全局导航菜单的 PortalSiteMapProvider 对象。 |
|
获取默认连接到当前导航菜单或“快速启动”工具栏的 PortalSiteMapProvider 对象。 |
|
获取默认连接到痕迹导航的 PortalSiteMapProvider 对象。 按照与 CurrentSiteNavSiteMapProvider 基本相同的方式声明此属性 (Property),但需要排除 EncodeOutput="true" 属性 (Attribute)。 |
|
获取一个 PortalSiteMapProvider 对象,NavigationType 属性设置为 Global。 |
|
获取或设置是否将提供程序返回的任何 PortalSiteMapNode 对象的 Title 属性变为 HTML 代码。 ASP.NET 菜单控件不会在呈现时自动将 Title 属性进行 HTML 编码。但 ASP.NET SiteMapPath 控件会将 Title 属性进行 HTML 编码。 |
|
获取或设置在每个级别显示的动态子项的数目。动态子项可以是子网站(任何 SPWeb 对象)和网页。 |
|
获取或设置从提供程序返回的节点是否应各自具有唯一的 Key 属性值。 若要在创作的链接和标题上正常使用菜单突出显示,可设置 RequireUniqueKeysForNodes="false"。在通过数据源连接到 ASP.NET 菜单控件时,此设置不会导致出现问题,但对于大多数其他显示控件,应声明 RequireUniqueKeysForNodes="true"。 |
|
获取或设置此提供程序是否返回子网站。 |