MOSS for Developers - 第 6 部分:页面导航
从开发者的角度提供页面导航的概述。此内容是 www.myrampup.com MOSS 内容的第 6 部分。
引言
SharePoint 直接构建在 .NET Framework 3.0 之上。与上一版本的 SharePoint 在架构方面不同,上一版本是集成到 ASP.NET 中的。但得益于 .NET 团队在 .NET 3.0 版本中的许多新增功能或更改,特别是 ASP.NET 2.0,SharePoint 团队能够直接更改 ASP.NET 在 SharePoint 站点上下文中的工作方式。SharePoint 导航更像是一种可插拔的基础结构,可以提高应用程序的可扩展性。
在讨论页面导航时,大多数网站都采用某种形式的视觉导航,以帮助用户轻松地在站点中移动,并找到他们所需的信息和网页。虽然外观和感觉可能因站点而异,但通常会以导航栏或菜单列表的形式出现相同的基本元素,以将用户引导到网站的特定部分。
ASP.NET 1.x 开箱即用地为站点导航提供的支持很少,导致许多开发人员和 Web 设计人员要么构建自己的导航系统,要么购买第三方控件来满足其需求。所有这些都随着 ASP.NET 2.0 而改变,它引入了一个使用可插拔框架来公开站点层次结构的导航系统,以及插入此新模型的控件,从而轻松构建高质量的菜单和导航系统。本文介绍了 ASP.NET 2.0 中的导航系统的工作原理,并展示了如何将其扩展到 Visual Studio 2008 中默认使用的简单 XML 文件之外。您需要安装 Windows SharePoint Services 3.0 SDK。
理解 ASP.NET 2.0 中的导航系统
除了创建能够吸引开发人员和网站设计人员的引人注目的导航模型外,ASP.NET 2.0 导航系统的其他目标之一是创建一个提供可扩展性能力的架构,该架构足够灵活,可以满足广泛的需求。它基于 ASP.NET 2.0 框架中使用的提供程序模型,该模型提供了插入不同数据源的标准机制。
ASP.NET 2.0 导航框架可以分解为几个区域:
- 开发人员在实际网页上使用的 Web 导航控件(
Menu
、TreeView
和SiteMapPath
)。可以自定义这些控件的外观和感觉。 SiteMapDataSource
控件,TreeView
和Menu
导航控件绑定到该控件,在 Web 导航控件和导航信息的底层提供程序之间提供了一个抽象层。- 站点地图提供程序,这是可插入的提供程序,它公开描述网站布局的实际信息。ASP.NET 随附一个提供程序,即
XmlSiteMapProvider
,它使用具有特定架构的 XML 文件作为其数据存储。
这种分层架构在底层站点层次结构与网站上的控件之间创建了更松散的耦合,提供了更大的灵活性,并使得随着网站的发展,架构和设计更改更加容易。
下图显示了提供程序与控件之间的关系
在导航系统中,数据源描述了用户可以导航的网站页面的层次结构,以及如何将此信息显示给用户。这被称为站点地图。简单网站的布局可能是
Home
Products
Product A
Product B
Product C
Latest Offers
Contact Us
Email
Visit us
自定义导航和新的用户界面元素
Windows SharePoint Services 3.0 提供了令人兴奋的新导航功能,可增强用户对站点上下文的感知。位于页面左上角和中央区域的两个新的面包屑控件为用户提供了对当前站点之上和之内的站点结构的感知。顶部导航控件现在位于横幅下方,并使用类似选项卡式的结构进行显示。顶部导航和 **快速启动** 区域(左侧导航)现在都可以通过用户界面或对象模型进行高度自定义。所有这些新功能都改善了用户的导航体验,为高级用户和开发人员提供了强大的自定义导航机制。
与上一版本的 Windows SharePoint Services 一样,可以通过修改站点定义文件中的 `NavBars
` 元素或通过 Microsoft Office SharePoint Designer 2007 中的控件来更改导航控件的内容。但是,在新版本中,您还可以通过用户界面、.aspx 页面上的标记,或通过 `Microsoft.SharePoint.Navigation
` 命名空间中的类型和成员来修改控件。管理员可以启用或禁用左侧导航区域的 Menu
或 TreeView
控件。
Windows SharePoint Services 3.0 构建在 Microsoft ASP.NET 2.0 之上。除了导航方面的更改之外,ASP.NET 2.0 还提供了新的母版页、站点地图提供程序和站点地图控件,从而简化并大大改善了导航。
Windows SharePoint Services 3.0 中的新导航组件
Windows SharePoint Services 3.0 提供了以下新功能来改善站点导航:
- 用户感知链接;例如,为无法进行特定更改的用户移除 **设置** 链接,此功能通过“链接修剪”提供。
- 面包屑,为用户提供有关其在站点集合中位置的附加信息。
- 自定义顶部导航栏,从添加和删除链接到添加 Microsoft JScript 下拉菜单和弹出菜单,这由新的共享导航和母版页提供。此类菜单只能通过修改母版页来启用;没有内置支持来启用这些菜单。
- 自定义左侧导航栏,包括添加和删除链接到添加 JScript 下拉菜单和弹出菜单,这通过 ASP.NET 母版页和导航控件(如
SiteMapPath
、Menu
和TreeView
控件)提供。此类菜单只能通过修改母版页来启用;没有开箱即用的支持来启用这些菜单。 - 通过母版页提供的通用导航栏。
通过用户界面自定义快速启动和顶部链接栏
您可以在浏览器中通过在站点设置页面上进行选择来自定义 **快速启动** 区域和顶部链接栏。要自定义 **快速启动** 或顶部链接栏,请单击 **站点操作**,单击 **站点设置**,然后在 **外观** 部分下,单击要自定义的区域的相应链接。
- 要添加链接、更改链接顺序或继承父站点的链接,请单击 **顶部链接栏**,然后在 **顶部链接栏** 页面上,单击工具栏上的相应操作。
- 要添加或自定义 **快速启动** 中的链接和标题,请单击 **快速启动**,然后通过 **快速启动** 页面进行适当的自定义。
- 要显示 **快速启动** 或文件夹视图在 **快速启动** 区域,或两者都显示,请单击 **树视图**。在 **树视图** 页面上,选择 **启用快速启动** 以显示 **快速启动**。选择 **启用树视图** 以显示导航的文件夹视图。
通过对象模型添加链接
- Windows SharePoint Services 使用标准的 ASP.NET 控件进行导航。例如,`System.Web.SiteMapNode` 类是为出现在 SharePoint 页面左上角的全局面包屑实现的。
Menu
控件用于顶部导航链接和 **快速启动** 中的链接,SharePoint 站点的导航层次结构通过 `System.Web.SiteMapProvider` 类公开。可以自定义导航控件,包括TreeView
、Menu
和SiteMapPath
控件。 - 您可以使用 `
Microsoft.SharePoint.Navigation
` 命名空间中的类型和成员来自定义站点的导航。您可以使用 Windows SharePoint Services 对象模型来管理 **快速启动** 区域和顶部导航区域,重新排序链接,添加新链接或删除链接。您还可以管理与父站点相关的站点继承。 - `
Microsoft.SharePoint.SPWeb
` 类的 `Navigation
` 属性获取一个 `Microsoft.SharePoint.Navigation.SPNavigation
` 对象,该对象包含指定站点的所有导航属性,包括其相对于父站点的导航继承状态,以及页面层次结构和导航节点集合。SPNavigation
对象中的 `QuickLaunch
` 属性返回在 **快速启动** 区域中找到的导航节点集合,`Web
` 属性获取父站点集合的顶级根站点,而 `TopNavigationBar
` 属性返回表示顶部导航区域链接的导航节点集合。`SPNavigationNodeCollection
` 对象表示给定对象的有序导航节点集合,并提供了以编程方式添加或删除节点的可能性。 - 注意:尽管 `
SPNavigationNode
` 对象可以包含任意 URL,但无法对此类 URL 在对象上实现链接修复。但是,该对象可以包含站点集合中的文档和页面,并且支持链接修复。
示例
下面的示例创建一个链接并将其添加到 **快速启动** 栏的顶部
Dim siteCollection As SPSite = SPControl.GetContextSite(Context)
Dim site As SPWeb = siteCollection.AllWebs("TestSite")
Dim subSite As SPWeb = site.Webs("SubTestSite")
Dim nodes As SPNavigationNodeCollection = subSite.Navigation.QuickLaunch
Dim navNode As New SPNavigationNode("New Link", "http://www.msn.com", True)
nodes.AddAsFirst(navNode)
SPSite siteCollection = SPControl.GetContextSite(Context);
SPWeb site = siteCollection.AllWebs["TestSite"];
SPWeb subSite = site.Webs["SubTestSite"];
SPNavigationNodeCollection nodes = subSite.Navigation.QuickLaunch;
SPNavigationNode navNode = new SPNavigationNode("New Link",
"http://www.msn.com", true);
nodes.AddAsFirst(navNode);
由于新链接的 URL 位于 SharePoint 部署外部,因此 `SPNavigationNode
` 构造函数的第三个参数设置为 true
。要运行此示例,您必须在进行 POST 的页面上添加一个 `Microsoft.SharePoint.WebControls.FormDigest
` 控件。有关如何添加 FormDigest
控件的信息,请参阅 安全验证和进行 POST 以更新数据。该示例还需要引用和导入 `Microsoft.SharePoint
`、Microsoft.SharePoint.Navigation
和 `Microsoft.SharePoint.WebControls
` 命名空间。