在WSS中有两种方式可以实现对站点的定制:站点定义和站点模板。无论是一个站点定义还是一个站点模板都可以包含对一个WSS站点的定义:其中包括站点的列表、文件、Web part、feature和设置。
模板实际上是包括站点模板和列表模板,当用户通过Web界面或是SharePoint Designer更改一个站点或是列表的定义时,模板中仅仅记录了更改的内容而并没有包含全部定义。一个标准的自定义模板中实际上是引用了其原始的站点定义,所以当一个站点模板部署到一个新的站点上时,其引用的站点定义发生了变化,站点模板有可能就会出错。
站点模板文件的后缀名为.stp,站点模板stp文件中包含了一个站点模板库和一个Mainfest.xml文件,stp文件实际上是一个cab文件,使用站点设置中的将网站另存为模板的功能,可以将把网站模板导出到网站模板库中,下载该stp文件,可以把.stp的后缀名改称.cab打开看看里面的内容。
注意在使用将网占另存为模板这个功能的时候,可以选择包含当前站点的数据的。而保存的.stp文件也可以通过stsadm导入到一个新的站点中。例如导出的stp文件为 DemoSite.stp ,则执行
stsadm -o addtemplate -filename DemoSite.stp -title NewDemoSite -description It's a new site from DemoSite Template
结果就是可以建立一个新的站点名字为NewDemoSite。
站点定义是用来记录站点类型的,这里的站点类型指的是类似于空白站点、工作组站点、会议类型站点等等的站点,在MOSS 2007中有一句话叫做:Everything is site. 没错,所有的MOSS的用户界面都是依托于站点实现的,其中包括MOSS的管理中心和SSP宿主站点中的定义,这些站点实际上都是依托站点定义实现的,每一个不同类型的站点都有其对应的一套站点定义。像MOSS中新增加的blog站点,wiki站点实际上只是新增一个站点的类型而已,在WSS底层方面并没有为这些不同站点定义什么特殊的功能点。在12-hive文件夹下面有一个template目录,里面是WSS中各种站点类型的定义文件。如果你更改了这些站点定义文件,那么之后新建的站点也会随之更改。打开站点定义的内容会发现,站点定义的内容比较复杂,有xml\aspx\ascx\master\ dot\html各种各样类型的文件,其中xml文件中存储了站点的定义规则而其他类型的文件都是为了实现这个站点定义所使用的功能性文件和模板文件。
实际上开发者也可以自己对站点定义新增aspx页面文件,但是这些新增的文件都应处于一个unghosted的状态,并且要在web.config中声明为安全类型,否则将不能被执行,这是为了弥补上载aspx文件后未经声明而采取服务器端调用产生的漏洞。
站点定义中包括著名的四个xml配置文件,可以说这四个文件包含了一个站点的主要定义。
Onet.xml:最重要的定义文件,其中包括站点导航区域、列表定义、模板定义、内容类型定义、站点的配置和功能模块信息等等。位置在:\TEMPLATE\1033\STS\XML.
Schema.xml:定义了列表的视图、表单、特殊字段,每一个不同的列表类型有其独立的Schema.xml。位置在:\TEMPLATE\1033\STS\LISTS\.
WebTemp.xml:包含了站点定义的一些配置信息。位置在:\TEMPLATE\1033\XML.
DocIcon.xml:顾名思义,定义了不同文档类型的打开方式和图标。位置在:\TEMPLATE\XML.
微软强烈不推荐更改以上四个文件,即使新的站点定义也要在试图修改这四个文件。因为这四个文件的更改可能会导致你的MOSS站点彻底崩溃或影响以后的升级等等...
那么当开发人员对一个站点进行定制化开发的时候,使用哪种方法比较合适呢?其实两种方式有各自的优缺点,要根据不同情况来选择,微软在MSDN中给出了如下的一些比较:
* 站点定义比站点模板的优势在于:
数据直接存储与web server上,性能上要好。
直接修改Schema.xml能达到更高的定制化程度。其中包括新的文件类型定义、视图样式、一些菜单的更改等等。
* 站点定义的缺点有:
自定义站点的难度比较高,需要开发人员熟悉站点定义所使用的CAML语言。
开发站点定义文件之后,部署一个新的站点定义是一个难题。
站点定义中不能指定站点的主题。
站点定义需要具有服务器的管理员权限,直接操作服务器的文件。
* 站点模板比站点定义的优势在于:
站点模板的建立比较简单,通过Web界面定义过的站点可以直接导出成为一个.stp文件,几乎没有任何难度。实际上大部分站点模板中能自定义的东西在通过Web同样可以对站点进行定义,然后导出成.stp文件。站点模板易于部署,一行命令就可以搞定。
* 站点模板的缺点在于:
站点模板不是用来在开发环境中开发的,使用站点模板对站点进行定义,如果站点比较多的话会比较麻烦。站点模板依赖于站点定义,一旦生成站点模板的那个站点定义类型改变了,站点模板就不能在使用了。