Создание своего ContentType для Page Layout
В этом примере мы создадим свой content type для page layout и применим его к уже сущестующему layout'у. При этом свой Content Type мы будем делатьне с нуля, а унаследуем его от Publishing Page.
1. Создадим файл feature.xml. Не буду описывать куда его клать и как инсталлировать. Это уже много кто и где описывал. В том числе я в этом посте. В крайнем случае msdn и google вам помогут ;).
<Feature Id="0023C143-9E60-4277-A74F-048C7CAB5760"
Title="PageLayoutTest"
Description=""
Version="1.0.0.0"
Scope="Site"
SolutionId="6FAD47E8-7622-4D57-93E1-9FE02F385181"
xmlns="http://schemas.microsoft.com/sharepoint/">
<ElementManifests>
<ElementManifest Location="ContentType.xml"/>
<ElementManifest Location="CopyFiles.xml"/>
</ElementManifests>
</Feature>
2. Создадим файл ContentType.xml
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
......
<!-- Базовая страница -->
<ContentType ID="0x010100C568DB52D9D0A14D9B2FDCC96666E9F2007948130EC3DB064584E219954237AF3900F164056CC3DA474096DD366224B5D804"
Name="TestPageLayout"
Group="Custom Content Types"
Description="">
<FieldRefs>
<!-- здесь ссылаться на поле, используя <FieldRef /> -->
</FieldRefs>
</ContentType>
.......
</Elements>
Давайте разберемся с генерацией ID для Content Types:
Идентификаторы генерируются особым образом.
0x0101 - признак того, что мы наследуемся от документа
x010100C568DB52D9D0A14D9B2FDCC96666E9F2007948130EC3DB064584E219954237AF39 - так выглядить ID Publishing Page
00 - это разделитель. Он обязателен.
F164056CC3DA474096DD366224B5D804 - сгенерированный нами идентификатор
3. Теперь создадим файл CopyFiles.xml в котром и применим наш ContentType к PageLayout используя feature
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<Module Name="PageLayouts" Url="_catalogs/masterpage" Path="PageLayouts" >
<File Url="TestLayout.aspx" Type="GhostableInLibrary" >
<Property Name="ContentType" Value="$Resources:cmscore,contenttype_pagelayout_name;" />
<Property Name="PublishingAssociatedContentType" Value=";#TestPageLayout;;#0x010100C568DB52D9D0A14D9B2FDCC96666E9F2007948130EC3DB064584E219954237AF3900F164056CC3DA474096DD366224B5D804;#" />
</File>
</Module>
</Elements>
Примечание:
1) Две ";" подряд после TestPageLayout - это не опечатка, а просто у поля PublishingAssociatedContentType такой не тривиальный синтаксис.
2) Для того, чтобы все заработало, необходимо создать в папке с фичей папку PageLayouts и положить в нее файл TestLayout.aspx