Site Template 和 Site Definitions
原文链接:http://technet.bestworks.ws/Default.aspx?tabid=281
定制SharePoint站点,你有两种方式,使用定制的模板或创建站点定义。
定制的模板使你能够通过使用用户接口来定制一个站点。例如,你可以通过一个已有的列表得到一个定制的列表,或者创建一个定制列表,作为一个列表模板来使用,而站点管理员可以从一个可用的列表模板的列表中来选择它。SharePoint Services将所有的定制模板存放在内容数据库中。你可以从“顶层站点管理”或使用FrontPage 2003来定制列表和站点范本。
站点定义由位于每个web服务器文件系统中的多个文档组成。站点定义和模板一起实现对一个站点的定义。定制的模板总是同其所依赖的站点定义关联。一个定制的模板依赖于文件系统中的站点定义以正常工作。一个定制的模板在一个模板被生成后是同一个站点定义和站点的状态不同的。模板会跟踪到存贮在配置数据库中的站点定义的改变。本文文件描述使用定制的模板和站点定义的好处和缺点,并为何时选择使用一个而不是另一个提供指南,以及当安装产品更新时,如何避免覆盖定制的模板和站点定义。
创建定制的范本
现在我们已经知道定制的模板会跟踪到SharePoint站点定义的改变,我们可以来看看定制模板的不同类型:列表模板跟踪到列、窗体、页面,以及可选择的,和一个特定列表相关的内容的改变。站点模板跟踪到站点导航系统、web part、站点上存在的列表以及可选择的,到一个站点内容的改变。你可以保存一个已有的站点作为站点模板。
注意:对于你可以存贮在一个站点模板中的内容的大小方面,SPS有10M的限制。你可以在“顶层站点管理”的“管理和统计”部分,点击“查看站点使用数据”来查看站点内容的尺寸。
一个定制范本以后缀为.stp的档存在,它其实上是一个.cab档,你可以将之改成.cab后缀的文件并在windows explorer中打开它。此文文件用服务器产生的caml语言包含一个manifest.xml文檔,而此manifest文檔是Microsoft SharePoint Migration Tool manifest文档格式的一个子集。
假如你创建了一个站点,通过添加列表、事件、文档库、定制的web part,并应用特定的主题对该站点进行了定制。你想将之共享给其它的站点管理员或在任何子站点利用这个站点范本。在“站点设置”菜单,点击“到站点管理”在“管理和统计”部分,点击“作为模板保存”。输入一个文件名,并以stp作为后缀,然后为你的站点模板输入一个标题和描述。你也可以选择“包括内容”选择框。你以一个模板的形式在内容数据库的模板库中保存你的站点并使它对于其它的子站点创建时是可用的。当后面创建的子站点是基于相同的站点定义(如,在一个文档工作区)而且具有相同的语言设置,你就可以使用这个模板来创建子站点。
要使你创建的范本出现在站点创建向导的范本列表中,你需要将模板输出到文文件系统,并运行STSADM命令。要输出模板,用鼠标右击模板然后点击“保存目标为”命令,然后跟随提示以保存范本。一旦将模板保存在文文件系统中,打开命令窗口,键入以下命令:stsadm.exe –o addtemplate –filename “local_drive:"site_template_file_name.stp” –tile “Site_Template_Name”
注意:你必须重启IIS以使该改动生效。在重启了IIS后,Site_Template_Name模板在站点模板列表中就可以看见了。
使用同样的方式,你可以输出一个列表模板,但是该列表模板只是在你输出到站点的站点集中的可用的。
关于协作应用程序标注语言CAML
它是一个基于XML的语言,用于定义一个站点的协作对象。在SharePoint Services中,它定义站点、列表、域、视图或窗体。
CAML实际上有两个主要的元素---它们用于域的rendering和schema的定义,以及那些用于页面rendering的东西。例如,当你需要提取一个特定域的属性并在页面上rendering它时,你可以使用用于page-rendering的CAML元素。
你也可以在实施站点的时候,使用CAML来定义在站点数据库中的表。你可以使用CAML来定制一个SharePoint站点,或在到SharePoint Services中的Web Service的SOAP的消息中使用CAML以同SharePoint Services进行远程的交互。在这种情况下,你通过方法的参数来传递CAML串,将它们设置为属性,或通过方法或属性返回它们。详细的信息请参见SPS的SDK。
创建站点定义
站点定义同模板类似。站点定义由位于在每个web服务器文文件系统中的一些文文件组成。站点定义档包括XML标注,这些标注为一个站点定义一个模板。SharePoint Services中包含的缺省站点类型都使用站点定义创建(如团队站点、空白站点、文档工作区等等)。在安装过程中,SharePoint Services创建每个站点定义的一个版本。站点定义文文件存放在下面位置的子目录中:
Local_drive:"Program Files"Common Files"Microsoft Shared"web server extensions"60"TEMPLATE"1033"
建议你通过拷贝一个已有的站点定义来创建一个定制的站点定义,不要去修改SharePoint Services安装的原始文檔。因为你对原始文檔的修改在安装SharePoint Services的更新或Service Packs,或更新到产品的下一个版本时会丢失。
创建一个站点定义
1、 在下面的位置拷贝一个已有的站点模板文件:
a) Local_drive:"Program Files"Common Files"Microsoft Shared"Web Server Extensions"60"Template"lcid
b) 例如,拷贝一个站点模板文件夹并改名为“TRAINING”。
2、 然后在下面位置拷贝WEBTEMP.XML文件
a) Local_drive:"Program Files"Common Files"Microsoft Shared"Web Server Extensions"60"Template"XML
3、 将拷贝的文件改名,如改为:WEBTEMPTRAINING.XML
在初始化的时候,编译器会合并包含在有前缀之文檔WEBTEMP*.XML中的信息,并使用它们来创建站点。这为ISV提供了非常容易的扩展能力来创建同SharePoint产品和技术集成的站点定义。
注意:在SharePoint Portal Server中部署的区域都存贮在以/SPS*开头的目录中。
一个站点定义由下面三个档组成:WEBTEMP.XML, ONET.XML以及SCHEMA.XML。下面的表显示在文件系统中档的位置,以及它们的定义。
|
Site Definition File |
Location |
Description |
|
WEBTEMP.XML |
Local_drive:"Program Files"Common Files"Microsoft Shared"Web server extensions"60"TEMPLATE"1033"XML |
Specifies configurations of lists and modules for a site definition. |
|
ONET.XML |
Local_drive:"Program Files"Common Files"Microsoft Shared"Web server extensions"60"TEMPLATE"1033"*"XML |
Defines navigation bars such as the top link bar and the quick launch, available lists, document templates, base types, configurations, modules |
|
SCHEMA.XML |
Local_drive:"Program Files"Common Files"Microsoft Shared"Web Server Extensions"60"TEMPLATE"1033"Custom_Site_Template"LISTS |
Defines the columns, views, and contents of a list |
WEBTEMP.XML
WEBTEMP.XML文件包含在创建站点的实例时,在“模板选择”页面中可用的站点定义。WEBTEMP.XML为一个站点定义定义站点模板。缺省情况下,SharePoint Services包含下面的站点范本:团队站点、空白站点、文档工作区、会议工作区。
你可以编辑缺省的WEBTEMP.XML文件来修改已有的范本列表。要在站点范本列表中隐藏特定的范本,在WEBTEMP.XML文件中,找到范本那一部分,然后设置configuration元素的Hidden属性为TRUE。设置Hidden属性为False使模板是可见的。
在你对缺省版本进行修改前,记得拷贝和重命名WEBTEMP.XML文件。在下面的例子中,我们使用拷贝和重命名的文件WEBTEMPTRAINING.XML来创建一个Training Team Site和一个Trainee Workspace。
WEBTEMPTRAINING.XML
<?xml version="1.0" encoding="utf-8" ?>
<Templates xmlns:ows="Microsoft SharePoint">
<Template Name="TRAINING" ID="10101">
<Configuration ID="0" Title="Training Team Site" Type="0"
Hidden="FALSE"
ImageUrl="images/stsprev.jpg"
Description="This template provides a forum
for the team to create, organize, and share information
quickly and easily. It includes a document library, and
basic lists such as Announcements, Events, Contacts,
and Quick Links.">
</Configuration>
<Configuration ID="1" Title="Trainee Workspace" Type="0"
Hidden="FALSE"
ImageUrl="images/dwsprev.jpg"
Description="This definition creates a site for Trainees
to work together on specific documents.">
</Configuration>
</Template>
</Templates>
WEBTEMPTRAINING.XML文件包含一个Template元素,用来为一种站点定义一个模板。每个Template元素都有一个Name属性,它必须同前缀为webtemp的XML文件名相同。例如,在前面的代码中,Name的属性为Training,同有前缀webtemp的文件名字相同。在初始化过程中,SharePoint Services查看有webtemp前缀的文档,并将之装载到内存中去。
注意:要使更改生效,你必须重启IIS。只要你对WEBTEMP*.XML檔做了修改。
一个站点定义只需要一个Template根元素。为了避免同已有的SharePoint Services使用的ID冲突,为ID属性设置大于10000值。
WEBTEMPTRAINING.XML档为在创建站点时选择新的模板创建了其它的模板选择。如下图所示。
ONET.XML
ONET.XML文文件定义顶端链接条和快速访问条。它还为一个web part页面定义可用的缺省文文件和列表范本,如:文文件库、图片库、定制列表、讨论板、调查等等。ONET.XML文档还指定在创建站点时要包括的文文件的配置信息,以及在创建站点时确定这些文文件位置的module。对于详细的信息,请参看SDK。
为一个站点定制导航条
你可以定制一个存在站点的导航条,这通过在用于一个定制站点范本的ONET.XML文文件中的NavBar元素添加NavBarLink元素来实现。你可以增加一个到本地档、服务器上的页面或任何地方的任何文件和页面的链接。下面的例子添加了两个NavBarLink元素,一个提供到服务器上一个本地文件的链接,此文件名为Sample.aspx,一个提供到URL:http://example.microsoft.com/的链接。
<NavBars>
<NavBar Name="SharePoint Top Navbar" ID="1002">
<NavBarLink Name="Documents and Lists"
Url="_layouts/[%=System.Threading.Thread.CurrentThread.CurrentCulture.LCID%]/viewlsts.aspx">
</NavBarLink>
<NavBarLink Name="Create"
Url="_layouts/[%=System.Threading.Thread.CurrentThread.CurrentCulture.LCID%]/create.aspx">
</NavBarLink>
<NavBarLink Name="Site Settings"
Url="_layouts/[%=System.Threading.Thread.CurrentThread.CurrentCulture.LCID%]/settings.aspx">
</NavBarLink>
<NavBarLink Name="Get Current Data" Url="_layouts/Sample.aspx"></NavBarLink>
<NavBarLink Name="microsoft" Url="http://example.microsoft.com/"></NavBarLink>
<NavBarLink Name="Help" Url="javascript:HelpWindow()"></NavBarLink>
</NavBar>
<NavBar Name="Documents" ID="1004">
</NavBar>
<NavBar Name="Pictures" ID="1005">
</NavBar>
<NavBar Name="Lists" ID="1003">
</NavBar>
<NavBar Name="Discussions" ID="1006">
</NavBar>
<NavBar Name="Surveys" ID="1007">
</NavBar>
</NavBars>
使用site Configurations
当创建站点定义时,configuration元素确定包含哪些lists和modules。一项configuration允许一个站点定义在站点布局和设计方面提供多个选择,如团队站点、空白站点、文档工作区。每个以上所提及的站点模板都是对list和web parts进行不同的配置的结果,然后在这里用configuration元素代表。WEBTEMP.XML和ONET.XML都包括configuration元素。在WEBTEMP.XML文件中,此元素包含在Template元素里,并为站点定义确定需要包含的configuration选项。
在ONET.XML文件中,Configuration元素包含在Configurations元素里,它确定一个或多个包含lists和modules的配置。每个configuration元素都包含一个ID属性,在ONET.XML档中,对于一个列表定义的配置通过ID属性同一个站点模板中指定的配置关联。在Template元素中的Name属性的值和这个ID属性的组合提供到一个ONET.XML文文件中一个特定的Configuration元素之内容的引用。
你可以为一个站点定义重用在指定在ONET.XML档中的已有的列表定义。你也可以在一个ONET.XML档中创建多个Configurations。使用这种方式,每个配置---configuration允许创建拥有不同列表组、web parts和布局的站点。
表:配置元素属性
|
Name |
Description |
|
Description |
Optional Text. Contains the description of the site configuration that appears on the Template Selection page. |
|
Hidden |
Optional Boolean. Specifies whether the site configuration appears as an option on the Template Selection page. |
|
ID |
Required Integer. Specifies a unique ID for the configuration. |
|
ImageUrlURL |
Optional Text. Contains the URL for the preview image displayed on the Template Selection page. |
|
Name |
Optional Text. Contains the name of the configuration. |
|
Title |
Optional Text. Contains the title of the configuration that is displayed on the Template Selection page. |
|
Type |
Optional Text. Identifies the configuration with a specific site definition. |
要在站点定义中创建一项配置,在你自己的WEBTEM*.XML文件中使用configuration元素,在此引用一个或多个ONET.XML文件。
例如,在前面例子中的WEBTEMPTRAINING.XML文档使用了两个configuration来定义不同的站点配置,一个针对training团队站点,一个针对training文档工作区站点。这个例子在一个单一的站点定义里使用了两个配置---configuration,由此,你知道你可以在一个单独的WEBTEMPTRAINING..XML文件中用不同的配置包含多个定义,每个指向不同的站点定义目录以及相应的ONET.XML文件。
在ONET.XML档中,每一项configuration定义一个特定类型的站点,你可以依站点定义创建此站点。在此檔中的所有configuration都共享一组可用的列表定义,文文件模板,导航区域,基本的列表类型以及在档定义的modules。你可以通过在configuration元素中定义的列表集中添加一项list元素来添加一项到定义在ONET.XML档中的一个列表的引用。例如,假如你要在ONET.XML文件中用一个143的Type属性定义一个名叫“My Custom List”的列表类型,然后你添加<List Title=“My_Custom_List” Type=143 URL=”Lists/My_Custom_List”/>,以在configuration项中增加一个列表定义。下面的例子显示为特定的WEBTEMP*.XML文件,在ONET.XML档中对于configuration的安排。
<Configurations>
<Configuration ID="0" Name="Default">
<Lists>
<List Title="My_Custom_List" Type="143" Url="Lists/My_Custom_List" />
<List Title="Shared Documents" Url="Shared Documents"
QuickLaunchUrl="Shared Documents/Forms/AllItems.aspx"
Type="101" />
<List Title="General Discussion" Url="Lists/General Discussion"
QuickLaunchUrl="Lists/General Discussion/AllItems.aspx"
Type="108" />
<List Title="Announcements" Type="104" Url="Lists/Announcements" />
<List Title="Links" Type="103" Url="Lists/Links" />
<List Title="Contacts" Url="Lists/Contacts" QuickLaunchUrl="Lists/Contacts/AllItems.aspx" Type="105" />
<List Title="Events" Type="106" Url="Lists/Events" />
<List Title="Tasks" Url="Lists/Tasks" QuickLaunchUrl="Lists/Tasks/AllItems.aspx" Type="107" />
<List Title="Site Template Catalog" Type="111" Url="_catalogs/wt" RootWebOnly="TRUE" />
<List Title="Web Part Catalog" Type="113" Url="_catalogs/wp" RootWebOnly="TRUE" />
<List Title="List Template Catalog" Type="114" Url="_catalogs/lt" RootWebOnly="TRUE" />
</Lists>
<Modules>
<Module Name="Default"/>
<Module Name="WebPartPopulation"/>
</Modules>
</Configuration>
<Configuration ID="1" Name="DWS">
<Lists>
<List Title="Shared Documents" Type="101" />
<List Title="Image Library" Type="109" />
<List Title="General Discussion" Url="Lists/General Discussion"
QuickLaunchUrl="Lists/General Discussion/AllItems.aspx" Type="108" />
<List Title="Announcements" Type="104" Url="Lists/Announcements" />
<List Title="Contacts" Url="Lists/Contacts" QuickLaunchUrl="Lists/Contacts/AllItems.aspx"
Type="105" />
<List Title="Links" Type="103" Url="Lists/Links" />
<List Title="Events" Url="Lists/Events" QuickLaunchUrl="Lists/Events/AllItems.aspx"
Type="106" />
<List Title="Tasks" Type="107" />
<List Title="Site Template Catalog" Type="111" Url="_catalogs/wt" RootWebOnly="TRUE" />
<List Title="Web Part Catalog" Type="113" Url="_catalogs/wp" RootWebOnly="TRUE" />
<List Title="List Template Catalog" Type="114" Url="_catalogs/lt" RootWebOnly="TRUE" />
</Lists>
<Modules>
<Module Name="DWS"/>
<Module Name="WebPartPopulation"/>
</Modules>
</Configuration>
</Configurations>
使用Modules
Modules服务于两个目标。Modules确定和一个定义相关的所有档,并确定在一个新站点中这些文件的位置。例如,假如档是一个web part页面,module定义会确定web part页面本身以及确定包含在此页面上的web parts,或列表或文件。文件封装在作为module的子元素的File元素中。
你必须在Configuration元素中声明一个module作为一个元素。你也可以在configuration外面使用modules来定义作为站点定义一部分的任何档的URL。
下面是一个ONET.XML文件的例子,显示如何使用module。
<Module Name="Default" Url="" Path="">
<File Url="default.aspx" NavBarHome="True">
<View List="104" BaseViewID="0" WebPartZoneID="Left"/>
<View List="106" BaseViewID="0" WebPartZoneID="Left"
WebPartOrder="2"/>
<AllUsersWebPart WebPartZoneID="Right"WebPartOrder="1">
<![CDATA[
<WebPart xmlns=http://schemas.microsoft.com/WebPart/v2
xmlns:iwp="http://schemas.microsoft.com/WebPart/v2/Image">
<Assembly>Microsoft.SharePoint, Version=11.0.0.0,
Culture=neutral,
PublicKeyToken=71e9bce111e9429c</Assembly>
<TypeName>Microsoft.SharePoint.WebPartPages.ImageWebPart
</TypeName>
<FrameType>None</FrameType>
<Title>Site Image</Title>
<iwp:ImageLink>/_layouts/images/homepage.gif
</iwp:ImageLink>
</WebPart>
]]>
</AllUsersWebPart>
<View List="103" BaseViewID="0" WebPartZoneID="Right"
WebPartOrder="2"/>
<NavBarPage Name="Home" ID="1002" Position="Start">
</NavBarPage>
<NavBarPage Name="Home" ID="0" Position="Start">
</NavBarPage>
</File>
</Module>
注意:HTML定义不允许嵌套<CDATA>标注。为了解决此问题,你需要在移去行内标注,而在它的内容上使用HtmlEncode。
URL属性是需要的,并为module指派执行的主要档。例如,URL指定一个web part的页面,叫着default.aspx,或一个特定web part的dwp檔。在Module元素中,你可以包括web part定义以及在web part区域的放置。前面的例子中,指定了一个单一的image web part,并显示在web part区域的右边。
你还能指定是否在页面的顶层导航区域显示一个module,或放置在页面的web part区域。在前面的例子中,在module中的view和web part显示在主页中。当创建站点后,此站点包括通过module定义的任何档。
使用SCHEMA.XML来定义域
SCHEMA.XML档为一个列表定义视图、窗体和任何特定的域。要定制一个拥有定制视图的列表,你可以修改SCHEMA.XML档并在列表定义中添加域。
在列表定义中添加一个域
1. Go to the following directory:
Local_drive:"Program Files"Common Files"Microsoft Shared"Web Server Extensions"60"TEMPLATE"1033"Custom_Site_Template"LISTS
每个子目录都代表一个特定的列表。
- 打开一个你想定制的代表列表的子目录
- 在文本编辑器中打开SCHEMA.XML文件。
- 在檔的 Metadata 部分, 找到在包含一个列表类型中所有域定义的Fields 元素。 你可像如下所示那样在Fields元素下面增加新的域:
<Field Name="EmployeeID" DisplayName="Employee ID" Type="Number"Required="TRUE" Description="Enter the ID from your employee badge."/>
详细的信息,参考SDK。
为一个列表定制工具条Toolbar
如果要为列表定制工具条,你需要修高SCHEMA.XML文件中的Toolbar元素。要在工具条上增加一个新的链接,例如,你可以拷贝一个链接的已有定义然后再修改它。这种做法会保持用于显示链接的表的嵌套不变并确保你增加的链接的样子和其它的链接一样。
下面的例子在包含在Shared Documents档夹里的一个文档列表的工具条上增加一个链接。
<tr>
<td style="padding-left: 2px;padding-bottom: 2px" width=100%>
<table border=0 cellpadding=0 cellspacing=0 width=100%>
<tr>
<td width=100% class="ms-unselectednav" colspan=2>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td valign=top>
<img src="/Portals/3/http://www.cnblogs.com/_layouts/images/rect.gif">
</td>
<td>
<A HREF="]]></HTML><HttpVDir/><HTML><![CDATA[/Shared Documents/MeetingNotes.doc">]]></HTML><HTML>Type Conversions</HTML><HTML><
浙公网安备 33010602011771号