通过使用Microsoft.SharePoint.WebControls.DelegateControl,我们可以为快速启动导航指定一个自定义的 数据源控件。通过传递给该委拖(delegate)的控件来为快速启动提供数据源。数据可以来自数据库或代码中。这种类型的定制化并不会改变链接的显示方 式。
您可以通过替换又委托功能提供的数据源来替换快速启动中默认显示的节点。
下面的示例显示了default.master中声明的默认数据源,其中指定ControlId的值为QuickLaunchDataSource。
<
SharePoint:DelegateControl
runat
="server"
ControlId ="QuickLaunchDataSource"
Scope ="Web" >
< asp:SiteMapDataSource
SiteMapProvider ="SPQuickLaunchProvider"
ShowStartingNode ="False"
id ="QuickLaunchSiteMap"
runat ="server"
/>
</ SharePoint:DelegateControl >
ControlId ="QuickLaunchDataSource"
Scope ="Web" >
< asp:SiteMapDataSource
SiteMapProvider ="SPQuickLaunchProvider"
ShowStartingNode ="False"
id ="QuickLaunchSiteMap"
runat ="server"
/>
</ SharePoint:DelegateControl >
我们可以创建一个功能(feature)来覆盖默认的委托。在/TEMPLATE/FEATURES目录下创建一个文件夹来指定替代数据源。
首先创建Feature.xml文件来引用feature所需的元素,包括数据源使用的dll组件和其他XML文件(NavigationSiteSettings.xml)。
<
Feature
Id
="541F5F57-C847-4e16-B59A-B31E90E6F9EA"
Title ="Portal Left Navigation"
Description ="Enable portal navigation for the left navigation bar."
Version ="12.0.0.0"
Scope ="Web"
ReceiverAssembly ="Microsoft.SharePoint.Publishing, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
ReceiverClass ="Microsoft.SharePoint.Publishing.NavigationFeatureHandler"
xmlns ="http://schemas.microsoft.com/sharepoint/" >
< ElementManifests >
< ElementManifest Location ="NavigationSiteSettings.xml" />
</ ElementManifests >
</ Feature >
Title ="Portal Left Navigation"
Description ="Enable portal navigation for the left navigation bar."
Version ="12.0.0.0"
Scope ="Web"
ReceiverAssembly ="Microsoft.SharePoint.Publishing, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
ReceiverClass ="Microsoft.SharePoint.Publishing.NavigationFeatureHandler"
xmlns ="http://schemas.microsoft.com/sharepoint/" >
< ElementManifests >
< ElementManifest Location ="NavigationSiteSettings.xml" />
</ ElementManifests >
</ Feature >
下面是NavigationSiteSettings.xml,该文件重定义了site map provider作为QuickLaunchDataSource控件,将Sequence属性值设为50,来替换默认的左侧导航结点。
(注:Sequence值要比原先传递给委托的控件的值低,才能替换原先的控件)
<
Elements
xmlns
="http://schemas.microsoft.com/sharepoint/"
>
< Control Id ="QuickLaunchDataSource" Sequence ="50"
ControlClass ="System.Web.UI.WebControls.SiteMapDataSource"
ControlAssembly ="System.Web, version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" >
< Property Name ="SiteMapProvider" > AreasAndPagesSiteMapProvider </ Property >
< Property Name ="EnableViewState" > true </ Property >
< Property Name ="StartFromCurrentNode" > true </ Property >
< Property Name ="StartingNodeOffset" > 0 </ Property >
< Property Name ="ShowStartingNode" > false </ Property >
< Property Name ="ID" > qlSiteMap </ Property >
</ Control >
< HideCustomAction
Id ="QuickLaunch"
HideActionId ="QuickLaunch"
GroupId ="Customization"
Location ="Microsoft.SharePoint.SiteSettings" />
</ Elements >
< Control Id ="QuickLaunchDataSource" Sequence ="50"
ControlClass ="System.Web.UI.WebControls.SiteMapDataSource"
ControlAssembly ="System.Web, version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" >
< Property Name ="SiteMapProvider" > AreasAndPagesSiteMapProvider </ Property >
< Property Name ="EnableViewState" > true </ Property >
< Property Name ="StartFromCurrentNode" > true </ Property >
< Property Name ="StartingNodeOffset" > 0 </ Property >
< Property Name ="ShowStartingNode" > false </ Property >
< Property Name ="ID" > qlSiteMap </ Property >
</ Control >
< HideCustomAction
Id ="QuickLaunch"
HideActionId ="QuickLaunch"
GroupId ="Customization"
Location ="Microsoft.SharePoint.SiteSettings" />
</ Elements >