MOSS 07建立在asp.net2.0基础上,引入了一个非常重要的功能:WEB内容管理(Web Content Management),它支持用户更换母版页(Master Page),修改页面,完全自定义母版页面等。有了统一母版页的支持,可以统一网站风格,提高开发效率。MOSS本身提供了很多母版供用户使用,但是往往达不到实际用户的需求。
MOSS母版页分为以下两类:
1:网站母版页:当前站点下的当前用户创建的页面所使用的母版页;
MOSS母版页编辑工具:
我们创建自定义母版页可以参考系统提供的母版页的创建格式。编辑母版最好借助一个工具:SPD,存放路径类似于:http://jiangmin:8000/_catalogs/masterpage。要注意的是它并不是一个实际的物理路径。
第一部分:创建MOSS的母版页需要的准备知识:
第一:占位符的概念及作用。
概念:在母版页中预留出一部分空间供内容页使用。以ContentPlaceHolder控件的形式出现。
作用:可以让用户更加灵活的修改页面。
默认母版页(default.master)中的占位符:在系统提供的任何一个母版页的源代码中,会发现它提供了非常多的占位符,这些占位符的ID都是固定的。对应关系如下:
放置连接到顶级站点的超连接
放置顶部一行内容。
放置站点名称
放置搜索框
放置水平导航栏
放置水平导航栏一行内容
页面编辑控件,当页面进入编辑页面模式时使用(当我们点 Site Actions, Edit Page后)
在 Windows SharePoint Services中默认为空,用于附加的页面编辑控件
左侧的图片
Title区左侧边框
TitleBreadcrumb页面导航区
Breadcrumb区下面的标题
一个放置页面级命令的地方,比如在WIKI站点里的Edit Page, History, Incoming Links
Title区右侧空白
15、PlaceHolderTitleAreaSeparator
TitleAreaSeparator区
左侧导航区数据源
在页面中有日历时为其显示一个日期选择框
左侧导航区上面的导航区
左侧导航区
左侧导航区下面的动作区
左侧导航区的宽度
左侧导航区的边框元素
页面body的边框元素
页面描述区
页面主体
页面body的右边空白
这是页面中必备的 "form digest"安全组件。
页面底部需要的一块特殊内容
附加在页面顶部的body中的样式
TitleArea附加的样式
提供给内容页添加所有可以放在<head>区域的内容,如CSS、JS等。
第二:DelegateControl是什么?有什么用?
定义:它是一个控件的包装器。
作用:像QuickPart一样,用来对用户控件进行包装,用户可以开发ascx控件。
如何应用:
1:创建web 工程MyDelegateControlDemoTest,用户控件:DelegateControlDemoTest.ascx;
2:创建feature:详细内容可参考下面的第三条:什么是feature。
3:调用控件。在需要的编辑的页面源代码中输入下面内容:ControlId为控件名称。
</SharePoint:DelegateControl>
第三:什么是Feature? Features相当于一个网站的插件,一般会存放在以下路径:C:\Program Files\
Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\FEATURES,每一个feature一个目录,每个目录下面包含一个feature文件。
feature的应用场合分为:1:场;2:WEB应用程序;3:网站集;4:网站。
feature架构的属性列表如下:
1:ActivateOnDefault:默认是true,说明自动激活;
2:Description:feature的详细描述,在网站集功能界面上会显示出来;
3:Hidden:是否隐藏,默认是false,如果是true,则在网站集功能界面上看不到;
4:Id:唯一标识;
5:ReceiverAssembly:事件接收器;
6:Scop:应用范围,场,应用程序,网站集,网站
7:Titel:标题。
Feature的部署过程:
1:在C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\FEATURES创建一个和控件名相同的文件夹"DelegateControlDemoTest",然后,创建两个文件如下:
feature文件如下: Location指定了对应子文件的路径。
<Feature
Id="AA929AFF-4602-4d7f-A501-B80AC9A4BB32"
Title="DelegateControlJiangMin"
Description="jiangminMOSS"
Scope="Farm"
xmlns="http://schemas.microsoft.com/sharepoint/">
<ElementManifests>
<ElementManifest Location="DelegateControlDemoTest.xml" />
</ElementManifests>
</Feature>
DelegateControlDemoTest.xml文件如下:这里有两个重要的属性:
1:Id,及控件的ID,和创建的用户控件名称一样;
2:ControlSrc:控件的路径,注意路径写法;
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<Control
Id="DelegateControlDemoTest"
Sequence="50"
ControlSrc="~/_CONTROLTEMPLATES/DelegateControlDemoTest.ascx">
</Control>
</Elements>
2:复制DLL到C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN
3:在命令窗口运行下面语句注册控件。
stsadm -o installfeature -filename DelegateControlDemoTest\Feature.xml -force
第四:sharepoint中的服务器导航控件。 导航控件aspmenu:MOSS2007中的站点导航是基于ASP.NET的Navigation机制的,在默认的导航控件一共有三个。在MOSS中所有导航栏都是通过ASP:Menu控件或是 ASP:TreeView控件绑定到一个NavigationDataSource实现的,因此每一个导航菜单都有两个控件共同实现。 首先是一个 ASP:Menu控件定义导航栏的样式和层级属性; 其次是SiteMapDataSource或SPNavigationProvider作为导航栏的数据源Default.Mater中,三个导航栏的实现各有不同,顶部的导航栏是通过DelegateControl动态加载SiteMapDataSource作为数据源的,而左侧的两个则是动态加载一个SPNavigationProvider实现的数据源。顶部的导航栏代码如下:
代码说明:
1:其中aspmenu的使用大多都是样式控件,重要的属性是一个数据源控件的来源ID:DataSourceID;
2:DelegateControl动态加载SiteMapDataSource,SiteMapProvider属性是真正的数据源;
3:StartingNodeUr定义了该站点导航栏的起始位置,左侧的导航栏的起始位置和顶部的就不一样。因为顶部的导航栏通常都是从SiteCollection开始的,而左侧的导航栏是从当前站点开始的。MaximumDynamicDisplayLevels来让顶部导航栏显示更多的级次。
如何自定义导航菜单?可以通过定义一个XMLDataSource,然后将ASPMenu的DataSourceID指向XMLDataSource的ID来实现自定义的导航栏。XMLDataSource 如下。
<asp:XmlDataSource DataFile="sitemap.xml" ID="DemoXmlDataSource" runat="server" XPath="/*/*"></asp:XmlDataSource>
其中sitemap.xml文件如下。这个文件可以存放在母版页的目录下,也可以放在其它地方,根据实际情况修改DataFile的路径即可,上面的例子是站点地图存放在母版页目录下的情况。
<siteMap xmlns="http://SiteMap" >
<siteMapNode title="自定义导航菜单" url="TestMenu.aspx" description="自定义导航菜单">
<siteMapNode title="链接 1" url="test1.aspx" description="测试链接1" />
<siteMapNode title="链接 2" url="test2.aspx" description="测试链接2" />
</siteMapNode>
</siteMap>
上面的步骤都完成后,你会发现用SPD打开设计页面,能看到导航菜单加载正确,但当你发布时,会报下面的错误:此网页中不允许使用控件类型System.Web.UI.WebControls.XmlDataS,解决方案:在对应站点下的web.config文件,打开找到下面的行: 确保Safe="True" AllowRemoteDesigner="True"都为True。
<SafeControl Assembly="System.Web, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a"
Namespace="System.Web.UI.WebControls" TypeName="XmlDataSource"
Safe="True" AllowRemoteDesigner="True" />
第二部分:创建母版页。 其实有了第一部分的准备知识,我们很比较容易的去创建一个自定义的母版页。创建母版页我们用SPD来做。
1:复制default.master,放到同级目录下,我这里命名为MyCustomMaster.master。
2:保留所有 MyCustomMaster.master源代码中的服务器控件,删除所有HTML代码;
3:把新的母版页的HTML复制到 MyCustomMaster.master中;
4:根据母版页中的ContentPlaceHolder和相关控件来调整服务器控件在新的母版页中的位置;
5:设置好内容页的 ContentPlaceHolder的;
6:把MyCustomMaster.master设置成网站母版页。
总结:本文通过对占位符,DelegateControl,菜单导航控件,Feature的简介及应用,比较全面的说明了如何根据默认母版页创建一个简单的自定义母版页的过程。