views:

1441

answers:

2

I am totally new to Sharepoint (2007) so please bear with me. I would like to automatically create aspx pages when a new site is created. These pages will be linked to through tabs which will be defined by a master page. I do not have a custom site definition and was planning to apply feature stapling to the out of the box blank site definition.

Through my research, I think you can create a web part page and turn this into a feature. I can then staple this to the blank site definition. The problem is I haven't found any information on how to do this. So the two questions I have are:

  1. How do I create a feature that is just an aspx page?
  2. How do I staple this feature to a blank site definition?

I found one person asking the same question here: http://stackoverflow.com/questions/234302/how-to-add-a-web-part-page-to-a-site-definition I read the first response but it sort of goes over my head and I don't know if it really answers my question.

Thanks so much!

+2  A: 

The answer to your first question depends on whether you mean application pages or content pages. They each have their advantages: application pages are good in that they can run custom server-side code, and content pages are nice because (for example) they can be customized by users, but by default are restricted in what kind of code can be run.

For a pretty good discussion on the differences between the two types in capabilities and restrictions, check out the Windows SharePoint Services SDK and look at the topics called "Application _layouts page type" and "Content page type."

As for stapling, it's pretty easy and more flexible than adding new features to a site definition's onet.xml file. This article seems a pretty good overview of the alternatives. You might want to make a copy of the blank site definition, rename it, and then use that one in your work, though.

Features with content pages

You'll need three types of things for this:

  1. A feature.xml file -- just the boilerplate stuff that refers to the element manifest.
  2. A page template -- this could be the entire aspx page itself, or it could be (for example) a shell of a web part page with WebPartZones defined but no actual web parts (yet).
  3. The element manifest file which refers to your page templates and defines any web parts that should be provisioned as part of activation of your feature.

Your feature's folder structure would look something like this:

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/"&gt;
  <ElementManifests>
    <ElementManifest Location="elements.xml"/>
  </ElementManifests>
</Feature>

Elements.xml

<Elements xmlns="http://schemas.microsoft.com/sharepoint/"&gt;
  <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"&gt;
                <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>

If you configure your feature in that way, you should be able to deploy site content pages within that structure.

Also, I highly recommend Ted Pattison's Inside Windows SharePoint Services book. It covers this topic in much detail, including the important security aspects of site content pages. It's easily worth the purchase price.

Chris Farmer
Hi Chris, Thanks for your response. I guess I want a content page since I might want to have a customized version of the page for each site. The article you linked to shows how to staple the feature to the site definition but I'm not sure how to create the feature. Windows SharePoint Services 3.0 Web Part Using Visual Studio 2005 Extensions (http://msdn.microsoft.com/en-us/library/aa973249.aspx) shows how to create a web part and feature using Visual Studio but what am I supposed to write in the code to create a content page? –
DL
That's great! Exactly what I was looking for. So I created all the files and installed the feature using the stsadm tool but it doesn't show up under "Site Features" or "Site collection features". I read something about a solutions files. Is this something I need? It seems very difficult to do.
DL
Actually, the above feature does show up. It's the stapler feature that doesn't
DL
You should be able to do this without a wsp solution file. Is your feature in the right place under the templates/features folder on the server?For solution file creation, I really like STSDEV. I started using it long ago, so there may be better tools now, but it's worth a look.
Chris Farmer
You might want to start another question to help find your stapler feature, since it's pretty off-topic for this particular one.
Chris Farmer
Thanks for your help!
DL
A: 

Hi, I am first time user and not even sure I you will see this message, but I am having the same probelm that DL was having. I don't understand what code creates a content page. I appreciate any help!

[email protected] Eric

Eric George