Adding ContentTypes to a list with SiteDefinition

2.2k views Asked by At

Using SharePoint 2010 and Visual Studio I have created a site definition (inheriting from the publishing site) which correctly creates all the required lists and now includes page instances in the "Pages" document library.

The Pages use the correct custom pagelayout and the correct content type, however, because the "pages" library only accepts Article, Blank and Welcome pages by default it doesnt know about my custom content types and therefore the page doesn't work as expected.

I've tried adding an EventListener on the "List Added" event, with no success, the debugging doesnt even break at my breakpoints, I've also tried the List Adding, List Item added and Site Provisioned events. None of which seem to work the way I want.

I've included the XML for the Site Definition below, how do I add my custom content types to the pages library so I dont have to manually add it?

<?xml version="1.0" encoding="utf-8"?>
<Project Title="Custom_Site_Definition" Revision="2" ListDir="" xmlns:ows="Microsoft SharePoint" xmlns="http://schemas.microsoft.com/sharepoint/">
  <NavBars>
    <NavBar Name="SharePoint Top Navbar" Url="/Site Template" ID="1002" />
<!-- removed -->
  </NavBars>
  <Configurations>
    <Configuration ID="0" Name="Custom_Site_Definition">
      <Lists />
      <WebFeatures>
        <!-- Include the common WSSListTemplateFeatures used by CMS -->
        <Feature ID="00BFEA71-DE22-43B2-A848-C05709900100" > </Feature>
        <Feature ID="00BFEA71-E717-4E80-AA17-D0C71B360101" > </Feature>
        <Feature ID="00BFEA71-52D4-45B3-B544-B1C71B620109" > </Feature>
        <Feature ID="00BFEA71-A83E-497E-9BA0-7A5C597D0107" > </Feature>
        <Feature ID="00BFEA71-4EA5-48D4-A4AD-305CF7030140" > </Feature>
        <Feature ID="00BFEA71-F600-43F6-A895-40C0DE7B0117" > </Feature>

        <Feature ID="00BFEA71-4EA5-48D4-A4AD-7EA5C011ABE5">
        </Feature>



        <Feature ID="22A9EF51-737B-4ff2-9346-694633FE4416">
          <Properties xmlns="http://schemas.microsoft.com/sharepoint/">
            <Property Key="ChromeMasterUrl" Value=""/>
            <Property Key="WelcomePageUrl" Value="$Resources:osrvcore,List_Pages_UrlName;/at-a-glance.aspx"/>
            <Property Key="PagesListUrl" Value=""/>
            <Property Key="AvailableWebTemplates" Value=""/>
            <Property Key="AvailablePageLayouts" Value=""/>
            <Property Key="SimplePublishing" Value="true" />
          </Properties>
        </Feature>
        <Feature ID="541F5F57-C847-4e16-B59A-B31E90E6F9EA">
          <Properties xmlns="http://schemas.microsoft.com/sharepoint/">
            <Property Key="InheritGlobalNavigation" Value="true"/>
            <Property Key="ShowSiblings" Value="true"/>
            <Property Key="IncludeSubSites" Value="true"/>
          </Properties>
        </Feature>
        <Feature ID="94C94CA6-B32F-4da9-A9E3-1F3D343D7ECB">
          <!-- Office SharePoint Server Publishing -->
        </Feature>
      </WebFeatures>
      <Modules>
        <Module Name="Home" />
      </Modules>
    </Configuration>
  </Configurations>
  <Modules>
    <Module Name="Home" Url="$Resources:osrvcore,List_Pages_UrlName;" Path="">
      <File Url="at-a-glance.aspx" Type="GhostableInLibrary" Level="Draft" >
        <Property Name="PublishingPageLayout" Value="~SiteCollection/_catalogs/masterpage/Custom Article Page.aspx, $Resources:cmscore,PageLayout_WelcomeLinks_Title;" />
      </File>
<!-- removed -->
    </Module>
  </Modules>
</Project> 
1

There are 1 answers

1
Mauro On BEST ANSWER

Never mind, I got it...eventually

Solution was to

  1. Add a Feature to the site definition project with the following in its elements.xml file
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  <ContentTypeBinding ContentTypeId="0x010100899F73B9F6814EA9AED9876985F28B39" ListUrl="Pages" />
</Elements>

Then add a feature dependency in the onet.xml file

<!-- Binds custom content types to Pages library.-->
<Feature ID="8290db1f-0a87-44f3-be22-28c61f9c8965">
</Feature>

and finally to add each page in a module at the end of the file (including the content type)

 <File Url="at-a-glance.aspx" Type="GhostableInLibrary" Level="Draft" >
        <Property Name="Title" Value="At a glance" />
        <Property Name="ContentType" Value="Custom_ContentTypes_Publishing - CustomFive" />
        <Property Name="PublishingPageLayout" Value="~SiteCollection/_catalogs/masterpage/Custom Article Page.aspx, $Resources:cmscore,PageLayout_WelcomeLinks_Title;" />
 </File>