第一个问题的答案取决于您是指应用程序页面还是内容页面。它们各有优势:应用程序页面很好,因为它们可以运行自定义的服务器端代码,而内容页面很好,因为(例如)它们可以由用户自定义,但默认情况下受限于可以使用的代码类型运行。
要对这两种类型在功能和限制方面的差异进行很好的讨论,请查看 Windows SharePoint Services SDK 并查看名为“Application _layouts page type”和“Content page type”的主题。
至于装订,它比向站点定义的 onet.xml 文件中添加新功能更简单、更灵活。这个article 似乎是对替代方案的一个很好的概述。不过,您可能想复制一份空白网站定义,重命名它,然后在您的工作中使用它。
内容页面的功能
为此,您需要三种类型的东西:
- feature.xml 文件——只是引用元素清单的样板文件。
- 页面模板 -- 这可能是整个 aspx 页面本身,也可能是(例如)定义了
WebPartZones 但还没有实际 Web 部件的 Web 部件页面的外壳。
- 元素清单文件,它引用您的页面模板并定义应在激活您的功能时提供的任何 Web 部件。
您的功能的文件夹结构如下所示:
12
+-- TEMPLATES
+-- FEATURES
+-- YourFeature
+-- PageTemplates
| +-- Page.aspx (simple aspx page)
| +-- WebPartPage.aspx (still simple, but with WebPartZones)
+-- feature.xml
+-- elements.xml
Feature.xml:
<Feature
Id="CFF117BC-9685-4a7b-88D0-523D9DAD21F0"
Title="Custom Pages Feature"
Scope="Web"
xmlns="http://schemas.microsoft.com/sharepoint/">
<ElementManifests>
<ElementManifest Location="elements.xml"/>
</ElementManifests>
</Feature>
Elements.xml
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<Module Path="PageTemplates" Url="Pages" >
<File Url="Page.aspx" Type="Ghostable" />
<File Url="WebPartPage.aspx" Name="WebPartPage.aspx" Type="Ghostable" >
<AllUsersWebPart WebPartZoneID="Left" WebPartOrder="0">
<![CDATA[
<WebPart xmlns="http://schemas.microsoft.com/WebPart/v2"
xmlns:cewp="http://schemas.microsoft.com/WebPart/v2/ContentEditor">
<Assembly>Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c</Assembly>
<TypeName>Microsoft.SharePoint.WebPartPages.ContentEditorWebPart</TypeName>
<Title>Some content that you want to provision with the feature</Title>
<FrameType>TitleBarOnly</FrameType>
<cewp:Content>
Hello world.
</cewp:Content>
</WebPart>
]]>
</AllUsersWebPart>
</File>
</Module>
</Elements>
Page.aspx
<%@ Page MasterPageFile="~masterurl/default.master"
meta:progid="SharePoint.WebPartPage.Document" %>
<asp:Content runat="server" ContentPlaceHolderID="PlaceHolderMain">
Hello World
</asp:Content>
WebPartPage.aspx
<%@ Page Language="C#" MasterPageFile="~masterurl/default.master" Inherits="Microsoft.SharePoint.WebPartPages.WebPartPage,Microsoft.SharePoint,Version=12.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c" meta:progid="SharePoint.WebPartPage.Document" %>
<%@ Register Tagprefix="WebPartPages"
Namespace="Microsoft.SharePoint.WebPartPages"
Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<asp:Content ID="main" runat="server" ContentPlaceHolderID="PlaceHolderMain" >
<table width="100%">
<tr>
<td valign="top" style="width:50%">
<WebPartPages:WebPartZone ID="Left" runat="server"
FrameType="TitleBarOnly" Title="Left Web Part Zone" />
</td>
<td valign="top" style="width:50%">
<WebPartPages:WebPartZone ID="Right" runat="server"
FrameType="TitleBarOnly" Title="Right Web Part Zone" />
</td>
</tr>
</table>
</asp:Content>
如果您以这种方式配置您的功能,您应该能够在该结构中部署网站内容页面。
另外,我强烈推荐 Ted Pattison 的 Inside Windows SharePoint Services 书。它详细介绍了这个主题,包括网站内容页面的重要安全方面。物超所值。